【问题标题】:OpenGL ES 1.1: Culling versus near clip plane -- performanceOpenGL ES 1.1:剔除与近裁剪平面——性能
【发布时间】:2012-01-21 22:10:50
【问题描述】:

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

那么在这种情况下,添加表面法线和打开背面剔除会给我带来任何性能优势吗?

【问题讨论】:

    标签: android iphone optimization opengl-es


    【解决方案1】:

    首先,表面法线与背面剔除无关,至少对于 OpenGL 而言。面的正面或背面取决于其顶点在投影到屏幕空间时的顺序,默认情况下(可以使用glFrontFace 更改)当顶点按逆时针和背面顺序排列时为正面- 按顺时针方向排列。

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

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

    【讨论】:

    • 谢谢,关于法线与剔除的观点非常好,d'oh!
    【解决方案2】:

    您当然不需要法线来启用背面剔除。剔除唯一重要的是多边形是正面还是背面。您可以使用glFrontFace 函数指定正面是什么,并使用glCullFace 函数准确指定需要剔除的内容。不需要法线。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-08
      • 2021-10-25
      • 1970-01-01
      • 2018-08-10
      • 2011-11-03
      • 2014-02-20
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多