第三十六章 面剔除总结
面剔除:只绘制面向用户的面,背对用户的面进行丢弃。
OpenGL可以检查所有面向观察者的面,并渲染它们,而丢弃那些背向的面,节约片段着色器调用。用的是:顶点数据的环绕顺序
默认情况下,逆时针顶点所定义的三角形将会被处理为正向三角形。而且实际的环绕顺序是在光栅化阶段进行的,也就是顶点着色器运行之后,
这些顶点就是从观察者视角所见的了。则顺时针的1-2-3所形成的三角形是不可见面。这个功能默认是禁用的。
当然需要更新顶点数据,用逆时针环绕的顺序定义。启用面剔除方法如下:
glEnable(GL_CULL_FACE);
之后的代码实现中,所有的背向面都会被丢弃,只对类似立方体这样的封闭形状有效。
当然也可以只剔除正向面,而不是背向面:glCullFace(GL_FRONT);
有三个参数选项:
GL_BACK————只剔除背向面
GL_FRONT————只剔除正向面
GL_FRONT_AND_BAKC————剔除背向面和正向面
默认值是GL_BACK
也可以调用glFrontFace,来调整:顺时针的面定义为正向面
glFrontFace(GL_CCW);
默认值是GL_CCW————逆时针;GL_CW————顺时针。
下面看下帧缓冲相关内容:
前面看的都是屏幕缓冲,比如:颜色缓冲,深度缓冲,模板缓冲。
把上述的缓冲结合起来就叫做帧缓冲,被存储在内存中。允许定义自己的帧缓冲,也就是可以定义自己的颜色缓冲,深度缓冲和模板缓冲
默认的帧缓冲是创建窗口的时候就生成和配置的,GLFW做好了这些。
使用函数glGenFramebuffe