1. 概述
面剔除(Face Culling)
是属于OpenGL
的渲染优化技术,通常一个物体在一个时刻我们只能看到一部分,但是在默认情况下,OpenGL
会将所有面都渲染,这样就会造成一定的浪费。面剔除
就是用来减少看不到面的渲染。
面剔除
是根据正面和反面进行剔除的,默认是逆时针顺序为正面(这个是可以通过函数指定的)。逆时针还是顺时针则是根据片段顶点绘制顺序以及摄像机的方向决定的。
如上所示,假定看向屏幕的方向即为摄像机的方向,所以左边为反面,右边为正面。
2. 相关函数
- 开启面剔除
glEnable(GL_CULL_FACE);
- 指定面的剔除模式
/*
GL_BACK:只剔除背向面,这个是默认值
GL_FRONT:只剔除正向面
GL_FRONT_AND_BACK:剔除正向面和背向面
*/
glCullFace(GL_FRONT);
- 指定正反面的定义
/*
GL_CCW : 指定逆时针为正面,这是默认值
GL_CW : 指定顺时针为正面
*/
glFrontFace(GL_CCW);
3. Demo
在Demo中地面是顺时针顺序绘制,玻璃窗口是逆时针顺序绘制。
- 以默认的
GL_CCW
方式绘制,此时地面无法显示
- 以的
GL_CW
方式绘制,此时玻璃窗口无法显示