绘制背面时,它们的法线是否会自动反转?

时间:2012-04-11 02:07:17

标签: opengl-es webgl

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

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

1 个答案:

答案 0 :(得分:8)

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

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

  

GL_LIGHT_MODEL_TWO_SIDE

     

params是指定的单个整数或浮点值                           是否对多边形进行单面或双面照明计算。                           它对点的光照计算没有影响,                           线,                           或位图。                           如果参数为0(或0.0),则指定单侧照明,                           并且只使用了前面的材料参数                           照明方程。                           否则,指定双面照明。                           在这种情况下,背面多边形的顶点被点亮   使用背面材料参数                           并在评估光照等式之前将其法线反转。                           前面多边形的顶点总是使用                           前面的材料参数,                           没有改变他们的法线。初始值为0.

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

=== EDIT ===

使用自定义着色器(GLES2.0或OpenGL3 +),然后在片段着色器中,您可以访问特殊布尔值gl_FrontFacing。要在着色器中模拟双面光照,只需测试gl_FrontFacing并将正常乘以负值false