当前位置: 首页 > news >正文

哈尔滨手机网站建设课件ppt免费下载

哈尔滨手机网站建设,课件ppt免费下载,网页链接转二维码,怎样自己做免费的网站深度测试 OpenGL-ES 深度测试是指在片段着色器执行之后#xff0c;利用深度缓冲区所保存的深度值决定当前片段是否被丢弃的过程 深度缓冲区通常和颜色缓冲区有着相同的宽度和高度#xff0c;一般由窗口系统自动创建并将其深度值存储为 16、 24 或 32 位浮点数。(注意只保存…深度测试 OpenGL-ES 深度测试是指在片段着色器执行之后利用深度缓冲区所保存的深度值决定当前片段是否被丢弃的过程 深度缓冲区通常和颜色缓冲区有着相同的宽度和高度一般由窗口系统自动创建并将其深度值存储为 16、 24 或 32 位浮点数。(注意只保存深度值) 当深度测试开启的时候 OpenGL-ES 才会测试深度缓冲区中的深度值如果此测试通过深度缓冲内的值可以被设为新的深度值如果深度测试失败则丢弃该片段。 深度测试是在片段着色器运行之后(并且在模板测试运行之后)在屏幕空间 (screen space) 中执行的。 与屏幕空间坐标相关的视区是由 OpenGL-ES 的视口设置函数 glViewport 函数给定并且可以通过片段着色器中内置的 gl_FragCoord 变量访问。 gl_FragCoord 的 X 和 y 表示该片段的屏幕空间坐标 ((00) 在左下角)其取值范围由 glViewport 函数决定屏幕空间坐标原点位于左下角。 gl_FragCoord 还包含一个 z 坐标它包含了片段的实际深度值此 z 坐标值是与深度缓冲区的内容进行比较的值。 深度缓冲区中包含深度值介于 0.0 和 1.0 之间物体接近近平面的时候深度值接近 0.0 物体接近远平面时深度接近 1.0。 深度测试实现 开启深度测试后如果片段通过深度测试OpenGL-ES 自动在深度缓冲区存储片段的 gl_FragCoord.z 值如果深度测试失败那么相应地丢弃该片段。 如果启用深度测试那么需要在渲染之前使用 **glClear(GL_DEPTH_BUFFER_BIT); **清除深度缓冲区否则深度缓冲区将保留上一次进行深度测试时所写的深度值。 另外在一些场景中我们需要进行深度测试并相应地丢弃片段但我们不希望更新深度缓冲区那么可以设置深度掩码**glDepthMask(GL_FALSE);**实现禁用深度缓冲区的写入只有在深度测试开启时才有效。 glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glClearColor(1.0f, 1.0f, 1.0f, 0.0f);OpenGL-ES 深度测试是通过深度测试函数 glDepthFunc 控制深度测试是否通过和如何更新深度缓冲区。 参数作用说明GL_ALWAYS永远通过测试GL_NEVER永远不通过测试GL_LESS片段值小于深度缓冲区通过测试GL_EQUAL片段值等于深度缓冲区通过测试GL_LEQUAL片段值小于等于深度缓冲区通过测试GL_NOTEQUAL片段值不等于等于深度缓冲区通过测试GL_GREATER片段值大于深度缓冲区通过测试GL_GEQUAL片段值大于等于深度缓冲区通过测试 深度测试启用后默认情况下深度测试函数使用 GL_LESS这将丢弃深度值高于或等于当前深度缓冲区的值的片段。 代码实现 原理 绘制了两张图片并且设置投影矩阵使其都绕着 Y 轴旋转注意这两张图片的初始化的 Z 轴坐标是不一致的所以会出现不同的深度此时的深度可以理解为 Camera 系统里的景深的概念。 如果开启深度测试近端的画面会遮挡远端出现正确的深度效果如果不开启会出现两张图片在抢夺 Z 的现象 static int Init(ESContext *esContext) {UserData *userData esContext-userData;const char vShaderStr[] #version 300 es \nuniform mat4 u_mvpMatrix; \nlayout(location 0) in vec4 a_position; \nlayout(location 1) in vec2 a_texCoord; \nout vec2 v_texCoord; \nvoid main() \n{ \n gl_Position u_mvpMatrix * a_position; \n v_texCoord a_texCoord; \n} \n;char fShaderStr[] #version 300 es \nprecision mediump float; \nin vec2 v_texCoord; \nlayout(location 0) out vec4 outColor; \nuniform sampler2D s_texture; \nvec4 tempColor; \nvoid main() \n{ \n tempColor texture( s_texture, v_texCoord ); \n outColor vec4(tempColor.r, tempColor.b, tempColor.g, tempColor.a); \n} \n;userData-programObject esLoadProgram(vShaderStr, fShaderStr);userData-samplerLoc glGetUniformLocation(userData-programObject, s_texture);userData-textureIdFront loadTgaTextures(./Huskey.tga);userData-textureIdBack loadTgaTextures(./scene.tga);userData-mvpLoc glGetUniformLocation(userData-programObject, u_mvpMatrix);userData-angle 0.0f;// 启用深度测试glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LESS);glClearColor(1.0f, 1.0f, 1.0f, 0.0f);return TRUE; }static void Draw(ESContext *esContext) {UserData *userData esContext-userData;GLfloat vertices1[] {-0.7f, 0.7f, 0.5f, // 左上-0.7f, -0.7f, 0.5f, // 左下0.7f, -0.7f, 0.5f, // 右下0.7f, 0.7f, 0.5f // 右上};GLfloat vertices2[] {// 顶点坐标 (x, y, z)-0.5f, 0.5f, 0.1f, -0.5f, -0.5f, 0.1f, 0.5f, -0.5f, 0.1f, 0.5f, 0.5f, 0.1f, };GLfloat texCoords[] {// 纹理坐标 (s, t)0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, };GLushort indices[] { 0, 1, 2, 0, 2, 3 };glViewport(0, 0, esContext-width, esContext-height);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glUseProgram(userData-programObject);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), vertices1);glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), texCoords);glEnableVertexAttribArray(0);glEnableVertexAttribArray(1);glUniformMatrix4fv(userData-mvpLoc, 1, GL_FALSE, (GLfloat *)userData-mvpMatrix.m[0][0]);// Bind the textureglActiveTexture(GL_TEXTURE0);glBindTexture(GL_TEXTURE_2D, userData-textureIdFront);// Set the sampler texture unit to 0glUniform1i(userData-samplerLoc, 0);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), vertices2);glEnableVertexAttribArray(0);glActiveTexture(GL_TEXTURE0);glUniformMatrix4fv(userData-mvpLoc, 1, GL_FALSE, (GLfloat *)userData-mvpMatrix.m[0][0]);glBindTexture(GL_TEXTURE_2D, userData-textureIdBack);glUniform1i(userData-samplerLoc, 0);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);}static void Update(ESContext *esContext, float deltaTime) {UserData *userData esContext-userData;ESMatrix perspective;ESMatrix orthographic;ESMatrix modelview;float aspect;// Compute a rotation angle based on time to rotate the cubeuserData-angle (deltaTime * 40.0f);if (userData-angle 360.0f){userData-angle - 360.0f;}aspect (GLfloat)esContext-width / (GLfloat)esContext-height;// Generate a perspective matrix with a 60 degree FOV// 如果不需要 Perspective 可以不设置esMatrixLoadIdentity(perspective);esPerspective(perspective, 45.0f, aspect, 1.0f, 20.0f);// Generate a model view matrix to rotate/translate the cube// 沿着 Z 轴负方向平移两个位置// 沿着 y 轴旋转一定的角度 x y z repsents x y z rotateesMatrixLoadIdentity(modelview);esTranslate(modelview, 0.0, 0.0, -2.0);esRotate(modelview, userData-angle, 0.0, 1.0, 0.0);esMatrixMultiply(userData-mvpMatrix, modelview, perspective);} static void ShutDown(ESContext *esContext) {UserData *userData esContext-userData;glDeleteTextures(1, userData-textureIdFront);glDeleteTextures(1, userData-textureIdBack);glDeleteProgram(userData-programObject); }实际效果如下 启动深度测试的效果 不启用深度测试 Z-Fight 现象 深度测试中深度冲突现象需要值得注意。深度冲突(Z-fighting)是指两个平面或三角形相互平行且靠近的过于紧密深度缓冲区不具有足够的精度确定哪一个平面靠前导致这两个平面的内容不断交替显示看上去像平面内容争夺顶靠前的位置。 防止深度冲突的方法 不要让物体之间靠得过近以免它们的三角形面片发生重叠 - 把近平面设置得远一些越靠近近平面的位置精度越高牺牲一些性能使用更高精度的深度值。
http://www.pierceye.com/news/563252/

相关文章:

  • 做网站的软件工程师网站积分程序怎么建设
  • ps网站轮播图怎么做动漫制作专业的来源
  • 怎么知道一个网站是谁做的建筑认证
  • 网站关键词优化排名公司网站备案的意思
  • 怎么把qq空间做成企业网站医疗网站设计
  • 个人博客网站需求分析上海最大企业前十名
  • 兴义之窗网站怎么做网页界面设计的类别
  • 黄南州网站建设公司安徽省建设厅执业资格注册中心网站
  • wordpress布置网站教程wordpress it模板下载地址
  • 网站首页栏目设置宿州建设网站公司哪家好
  • 西安网站建设怎么接单做社交的招聘网站
  • 实训课网站开发个人小结横岗做网站
  • 网站集约化建设管理方案wordpress加cnzz统计在那里加
  • 重庆知道推广网站方法青岛网络推广的有哪些公司
  • 自己做网站服务器要多少钱特殊字体
  • 网站建设合同 协议书网站建设工具有哪些
  • 网站建设的基本条件网站建设策划案怎么写
  • 知乎网站开发用的语言郑州建设网站哪家好
  • 企业官网建站费用长沙做无痛肠镜东大医院l网站
  • 建网站资料wordpress 读书模板
  • 网站建设初学者教程成华区微信网站建设公司
  • 沈阳网站建设-中国互联商城页面
  • 成交型网站倡导公司进贤南昌网站建设公司
  • 网站跟软件有什么区别是什么点击器原理
  • 网站建设项目策划书范文杭州 网站开发公司
  • 酒店网站建设设计企业营销型网站策划
  • 用dw怎么做登录页面的网站成都微信网站建设推
  • 合肥网站建设案例美丽说网站模板
  • 大学网站建设管理办法手机网站如何推广
  • 本网站正在建设升级中常用的软件开发平台