参考:添加链接描述
OpenGL能够检查所有面向(Front Facing)观察者的面,并渲染它们,而丢弃那些背向(Back Facing)的面,节省我们很多的片段着色器调用(它们的开销很大!)。但我们仍要告诉OpenGL哪些面是正向面(Front Face),哪些面是背向面(Back Face)。OpenGL使用了一个很聪明的技巧,分析顶点数据的环绕顺序(Winding Order)。
使用OpenGL的面剔除选项,它默认是禁用状态的。
启用面剔除:glEnable(GL_CULL_FACE);
改变需要剔除的面的类型:glCullFace(GL_FRONT);
glCullFace函数有三个可用的选项:glCullFace的初始值是GL_BACK
GL_BACK:只剔除背向面。
GL_FRONT:只剔除正向面。
GL_FRONT_AND_BACK:剔除正向面和背向面。
除了需要剔除的面之外,我们也可以通过调用glFrontFace,告诉OpenGL我们希望将顺时针的面(而不是逆时针的面)定义为正向面:
glFrontFace(GL_CCW);
默认值是GL_CCW,它代表的是逆时针的环绕顺序,另一个选项是GL_CW,它(显然)代表的是顺时针顺序。
对于单面物体,我们想看到两个面时,可以关闭剔除。
封闭的物体一般都会开启面剔除,剔除背面。