Face culling面剔除,背对着相机的面,就不要显示了。
基础知识:
1.front facing
朝向摄像机
2.back facing
背对摄像机
3.winding order
缠绕顺序。当我们定义一组三角形顶点时,我们是以顺时针或逆时针的特定缠绕顺序定义它们的。
float vertices[] = {
// clockwise
vertices[0], // vertex 1
vertices[1], // vertex 2
vertices[2], // vertex 3
// counter-clockwise
vertices[0], // vertex 1
vertices[2], // vertex 3
vertices[1] // vertex 2
};
OpenGL 在渲染图元时使用顺时针还是逆时针信息来确定三角形是正面三角形还是背面三角形。 默认情况下,使用逆时针顶点定义的三角形被处理为正面三角形。
在定义顶点顺序时,可以将相应的三角形可视化,像它面向您,因此指定的每个三角形都逆时针旋转,就像直接面向该三角形一样。
4.Face culling 面剔除
启动面剔除:
glEnable(GL_CULL_FACE);
还可以剔除正面超camera的面
glCullFace(GL_FRONT);
- GL_BACK: Culls only the back faces.
- GL_FRONT: Culls only the front faces.
- GL_FRONT_AND_BACK: Culls both the front and back faces.
glCullFace 的初始值是 GL_BACK。 我们还可以通过 glFrontFace 告诉 OpenGL 我们更喜欢顺时针面作为正面而不是逆时针面:
设定顺时针才是正面:
glFrontFace(GL_CCW);
当设定为正面剔除,只显示背面的时候: