一个立方体有6个面,但是我们最多只能看大3个面,所以如果我们可以丢弃那几个面,就可以加速我们的程序了。
但是问题也来了,我们如何确定哪些面camera能够看到,哪些不能看到。
我们现在规定:我们只画面向用户的面!
什么意思?一个面他都有两面,一面面向用户,一面背对。我们只画面向用户的。或者说,我们现在的问题变成了如何规定正向面和背向面。
在opengl中有个很聪明的技巧,就是分析顶点数据的环绕方式。
我们在定义一组三角形顶点的时候,肯定是要么顺时针表示,要么逆时针表示。
在opengl中,逆时针表示的面为正向面,顺时针为被向面。
所以我们在最初定义顶点时就要考虑顺序了。
实战
和前面一样,首先需要开启面剔除。
glEnable(GL_CULL_FACE);
同时我们也可以自定义到底是去丢弃逆时针还是顺时针
当我飞到箱子内部的时候会发现背面没有了
可以看到,面剔除是一个提高OpenGL程序性能的很棒的工具。但你需要记住哪些物体能够从面剔除中获益,而哪些物体不应该被剔除。
但是也能看到,前一章的窗户没有了,但是从背面又可以看到,这是因为 窗户的三角形是顺时针的。所以在画窗户的时候需要关闭面剔除。
ok重新出现。