文件名称:卷绕和背面剪裁-pt100换算表
文件大小:20.23MB
文件格式:PDF
更新时间:2024-07-31 06:22:33
OpenGL ES
5.10 卷绕和背面剪裁 前面章节的有些例子中调用“GLES30.glEnable(GLES30.GL_CULL_FACE)”语句打开了背 面剪裁,但到目前为止,并没有对背面剪裁进行介绍,本节将向读者介绍背面剪裁的相关知识。 5.10.1 基本知识 所谓背面剪裁是指渲染管线在对构成立体物体的三角形图元进行绘制时,仅当摄像机观察点 位于三角形正面的情况下才绘制三角形,若观察点位于背面则不进行绘制。打开背面剪裁后,在 大部分情况下可以提高渲染效率,去除大量不必要的渲染工作,图 5-45 说明了这个问题。 ▲图 5-45 是否打开背面剪裁的对比 从图 5-45 中可以看出,打开背面剪裁后正面朝向观察点的前面、上面、右面会被管线绘制, 而反面朝向观察点的左面、后面、下面则不会被绘制。对于大部分封闭立体物体而言,这就实现 了让管线对被挡住的面不执行绘制,有助于提高渲染速度。 若不打开背面剪裁,管线会对所有的面都进行绘制。被遮挡面上的片元虽然被绘制了,但还 是会被遮挡面上的片元所覆盖,最终并不会出现在屏幕上。这导致很多绘制工作都白做了,宝贵 的计算资源被浪费,同样情况下应用程序的帧速率(FPS)可能会下降很多。 提示 对于封闭立体物体的渲染,一般情况下应该打开背面剪裁。但如果绘制的是平 面物体,希望在正面和反面观察都能看到就不应该打开背面剪裁了。实际开发中, 读者应该根据具体需要来决定。 了解了背面剪裁的功效后,很重要的一点就是如何确定摄像机是位于一个面的正面还是反面。 在没有做出特殊设置的情况下,OpenGL ES 中规定当摄 像机观察一个三角形面时,若三角形中 3 个顶点的卷绕 顺序是逆时针则摄像机观察其正面,反之摄像机观察其 反面,图 5-46 说明了这个问题。 开发人员也可以通过设置告知渲染管线以顺时针 卷绕为正面,以逆时针卷绕为反面。下面就将与背面剪 裁及卷绕方式有关的语句一一列出,供读者在开发中根 据具体情况选用。 打开背面剪裁的语句。 1 GLES30.glEnable(GLES30.GL_CULL_FACE); // 打开背面剪裁 关闭背面剪裁的语句。 1 GLES30.glDisable(GLES30.GL_CULL_FACE); //关闭背面剪裁 设置逆时针卷绕为正面的语句。 ▲图 5-46 通过卷绕顺序确定三角形的正反面