我通过调用仅绘制几何图形的背面gl.cullFace(gl.FRONT)
。我注意到这些表面上的光影与我的预期相反。为了正确渲染,我是否必须明确反转背面表面法线的方向,还是 OpenGL 子系统会自动执行此操作?
编辑:想一想,如果我手动反转它们的法线,它们将成为正面并被剔除。
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
。