在学习延迟渲染光照处理的过程中,突然发觉对OpenGL的正面、背面剔除的理解是错误的。一张纸(一个平面)有两个面(正面,背面),当开启剔除的时候,把这个面绕某一轴旋转,这个面会呈现一隐一现的间隔,好像是把一个面(一个平面的正面或背面)剔除了没有进行渲染,这种理解是错误的,其实是把这整个平面进行了剔除。
以画线的形式渲染一个立方体进行验证:
1 禁用剔除:
glDisable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
2 剔除正面
glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
因为视角的关系,只剔除了两个面。
3 背面剔除
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
只把正面剔除时,剔除掉的两个面渲染了出来。