3D空间中的多边形的绘制
1、多边形的剔除
虽然多边形无限薄,但是它还是有两个面,这就表示可以从两个方向观察它。有时需要对其两面进行不同的显示绘制,这就是为何有些函数需要指定其应用于正面、背面、还有两个面都应用。无论任何情况,多边形的两个面都会分别绘制的。当预先知道多边形只有一个面是可见的时候,就没有必要对其两个面都进行绘制。例如,一个表面完全封闭的物体,比如一个球,其内部几乎就是永不可见的。通过叫作剔除的处理,可以通知OpenGL不去绘制多边形的某一面。要使用剔除,必须先调用带有GL_CULL_FACE参数的glEnable()函数来启用它,然后再通过glCullFace()函数来指定要剔除的面,其函数定义如下所示:
void glCullFace(Glenum mode);
参数mode取GL_FRONT值时,剔除多边形的正面;取GL_BACK时剔除多边形的背面;取GL_FRONT_AND_BACK值同时剔除两个面。取最后的值(GL_FRONT_AND_BACK)时,多边形根本不会被绘制,所以不是特别有用。而GL_BACK是默认的设置。
下一步是告诉OpenGL如何确定一个多边形的正面和背面。其确定的依据是多边形的绕向(polygonwinding),也就是所指定的顺序。面对一个多边形,可以选择它的任何一个顶点作为起点来描述它。但是要完成描述,就必须按顺时针方向或按逆时针方向来遍历多边形的所有顶点。因此保持定义多边形顶点的方式的一致性非常重要,这样OpenGL就可以根据多边形的绕向决定其哪一个面是正面,哪一个面是背面了。默认情况下,OpenGL将多边形逆时针绕向的面作为多边形的正面,而顺时针绕向的面作为其背面。可以通过glFrontFace()函数来改变这一默认设置,其函数定义如下:
void glFrontFace(Glenum mode);
如果想要使逆时针的面为正面,参数mode应取GL_CCW值,而若想以顺时针绕向的面为正面,其参数就应取GL_CW值。
2、多边形边的消隐
在轮廓线模式下绘制物体也是我们经常要遇到的,有时并不希望多边形的所有边都被显示出来。例如,用两个三角形来表现一个四边形时,就可能不希望其对角线也被显示出来。
3、多边形的反走样
同点和线一样,也能对多边形进行反走样。可以通过调用带有GL_POLYGON_SMOOTH参数的glEnable()和glDisable()函数来控制多边形的反走样,其默认状态是禁用。