5

我通过调用仅绘制几何图形的背面gl.cullFace(gl.FRONT)。我注意到这些表面上的光影与我的预期相反。为了正确渲染,我是否必须明确反转背面表面法线的方向,还是 OpenGL 子系统会自动执行此操作?

编辑:想一想,如果我手动反转它们的法线,它们将成为正面并被剔除。

4

1 回答 1

8

OpenGL前/后检测基于缠绕,而不是正常。法线向量对多边形是正面还是背面没有任何影响。

我认为您想要做的是设置glLightModelGL_LIGHT_MODEL_TWO_SIDE的选项。

GL_LIGHT_MODEL_TWO_SIDE

params 是一个整数或浮点值,用于指定是否对多边形进行单面或双面光照计算。它对点、线或位图的光照计算没有影响。如果 params 为 0(或 0.0),则指定单面光照,光照方程中仅使用正面材质参数。否则,将指定两侧照明。在这种情况下,使用背面材质参数照亮背面多边形的顶点 并在计算照明方程之前反转它们的法线。正面多边形的顶点始终使用正面材质参数进行照明,其法线不变。初始值为 0。

请注意,这仅适用于固定管道。

===编辑===

使用自定义着色器(GLES2.0 或 OpenGL3+),然后在片段着色器中您可以访问特殊的 boolean gl_FrontFacing。要在着色器中模拟两侧照明,只需测试gl_FrontFacing并将 normal 乘以负值 if false

于 2012-04-11T02:21:54.667 回答