(自用)learnOpenGL-高级OpenGL-面剔除Face Culling

一个立方体有6个面,但是我们最多只能看大3个面,所以如果我们可以丢弃那几个面,就可以加速我们的程序了。

但是问题也来了,我们如何确定哪些面camera能够看到,哪些不能看到。

我们现在规定:我们只画面向用户的面!

什么意思?一个面他都有两面,一面面向用户,一面背对。我们只画面向用户的。或者说,我们现在的问题变成了如何规定正向面和背向面。

在opengl中有个很聪明的技巧,就是分析顶点数据的环绕方式

我们在定义一组三角形顶点的时候,肯定是要么顺时针表示,要么逆时针表示。

在opengl中,逆时针表示的面为正向面,顺时针为被向面。

所以我们在最初定义顶点时就要考虑顺序了。

(自用)learnOpenGL-高级OpenGL-面剔除Face Culling_第1张图片

实战

和前面一样,首先需要开启面剔除。

glEnable(GL_CULL_FACE);

同时我们也可以自定义到底是去丢弃逆时针还是顺时针

(自用)learnOpenGL-高级OpenGL-面剔除Face Culling_第2张图片

当我飞到箱子内部的时候会发现背面没有了

(自用)learnOpenGL-高级OpenGL-面剔除Face Culling_第3张图片

可以看到,面剔除是一个提高OpenGL程序性能的很棒的工具。但你需要记住哪些物体能够从面剔除中获益,而哪些物体不应该被剔除。

但是也能看到,前一章的窗户没有了,但是从背面又可以看到,这是因为 窗户的三角形是顺时针的。所以在画窗户的时候需要关闭面剔除。

(自用)learnOpenGL-高级OpenGL-面剔除Face Culling_第4张图片

ok重新出现。

你可能感兴趣的:(learnOpenGL学习笔记,学习)