在3D空间中绘制三角形
在OpenGL中,要绘制一个实心的表面,仅仅靠点和线是不够的,还需要使用多边形。多边形是一种闭合的形状,可以用当前选择的颜色进行填充(也可以选择不填充),它是OpenGL中所有实心物体的组成基础。
最简单的多边形是三角形,它只有三条边。图元GL_TRIANGLES通过连接三个顶点,绘制三角形。
三角形 GL_TRIANGLES
环绕问题(winding)
顶点的指定次序以及方向的组合称为环绕。
在默认情况下,OpenGL认为逆时针方向环绕的一面是多边形的正面。这个问题十分重要,那是因为我们常常希望为一个多边形的正面和背面分别设置不同的物理特性,如设置不同的颜色和反射属性等。在同一个场景中,使所有的多边形保持环绕方向的一致并使用正面多边形来绘制所有实心物体的外表面是非常重要的。
如果想改变OpenGL的这个默认行为,可以调用下面这个函数:
glFrontFace(GL_CW);
参数GL_CW告诉OpenGL顺时针环绕的多边形将被认为是正面的;
参数GL_CCW告诉OpenGL逆时针环绕的多边形将被认为是正面的。
三角形带 GL_TRIANGLE_STRIP
使用该图元,可以绘制一串相连的三角形,从而节省大量时间。使用三角形带而不是分别指定每个三角形有两个优点:
1、 在用前三个顶点指定了第一个三角形之后,对于接下来的每个三角形,只需要再指定一个顶点。当需要绘制大量的三角形时,采用这种方法可以节省大量的程序代码和数据存储空间。
2、 提高了运算性能并节省了带宽。更少的顶点意味着数据从内存传输到图形卡的速度更快,并且顶点变换的次数也可以更少一些。
注意,三角形带图元的绘制过程,顶点并不是按照它们的指定顺序进行遍历的,这是为了保持每个三角形的环绕方向。