我只是通过调用gl.cullFace(gl.FRONT)
来绘制几何体的背面。我注意到这些表面上的光线与我的预期相反。为了正确渲染,我是否必须明确反转背面上的曲面法线方向,或者OpenGL子系统是否自动执行此操作?
编辑:想到这一点,如果我手动反转他们的法线,他们将成为正面并将被剔除。
答案 0 :(得分:8)
OpenGL前/后检测基于上弦,而不是正常。法线向量对多边形是被视为正面还是背面都没有任何影响。
我认为您要做的是设置glLightModel的GL_LIGHT_MODEL_TWO_SIDE
选项。
GL_LIGHT_MODEL_TWO_SIDE
params是指定的单个整数或浮点值 是否对多边形进行单面或双面照明计算。 它对点的光照计算没有影响, 线, 或位图。 如果参数为0(或0.0),则指定单侧照明, 并且只使用了前面的材料参数 照明方程。 否则,指定双面照明。 在这种情况下,背面多边形的顶点被点亮 使用背面材料参数 并在评估光照等式之前将其法线反转。 前面多边形的顶点总是使用 前面的材料参数, 没有改变他们的法线。初始值为0.
请注意,这仅适用于固定管道。
=== EDIT ===
使用自定义着色器(GLES2.0或OpenGL3 +),然后在片段着色器中,您可以访问特殊布尔值gl_FrontFacing
。要在着色器中模拟双面光照,只需测试gl_FrontFacing
并将正常乘以负值false
。