OpenGL ES 1.1:剔除与近剪裁平面 - 性能

时间:2011-12-16 11:00:51

标签: android iphone optimization opengl-es

我在OpenGL ES 1.1中编写应用程序。我在观察者周围渲染纹理球体,即眼睛视点位于球体的中心。因为我不需要任何光照效果,所以目前不需要为每个顶点设置表面法线。但是,我需要那些打开背面剔除。打开背面剔除有什么好处吗?因为我的眼睛位于球体的中心,所以任何被剔除的面部(即眼睛后面)都会被近z平面剪切处理。

在这种情况下,添加曲面法线并打开背面剔除会给我带来任何性能上的好处吗?

2 个答案:

答案 0 :(得分:3)

首先,曲面法线与背面剔除没有任何关系,至少对于OpenGL来说是这样。当投影到屏幕空间时,面的正面或背面由其顶点的顺序确定,默认情况下(可以使用glFrontFace更改)当顶点逆时针排序时面向正面顺时针方向订购后面板。

所以你不需要任何法线。这些仅用于照明计算而不是其他任何内容。单个顶点的法线应该如何影响周围的面部方向?取顶点法线的平均值?如果这些完全相反或更奇怪(因为用户可以指定他想要的任何法线)怎么办?

那说你也不需要对你的球体进行背面剔除,因为无论如何你总是从内部看到正面。但是打开它也没有什么坏处,因为你也没有看到任何背面(并且你可以假设面部剔除是免费的)。但是在这种情况下要注意方向或面部,当你在球体内部时,可能需要启用正面剔除(glCullFace(GL_FRONT))而不是背面剔除,因为大多数情况下对象进行细分以使其三角形朝向外部。或者您可以切换到glFrontFace(GL_CW)

答案 1 :(得分:0)

你当然不需要法线来启用背面剔除。对于剔除而言唯一重要的是多边形是正面还是背面。您可以使用glFrontFace函数指定前面的内容,并使用glCullFace函数准确指定需要剔除的内容。没有必要的法线。

那就是说,在这种情况下确实无关紧要,因为你的背面多边形无论如何都会被修剪。