1. 三角形
GL_TRIANGLES图元通过连接三个顶点绘制三角形,得到如图所示的三角形
glBegin(GL_TRIANGLES);
glVertex2f(0.0f,0.0f); // v0
glVertex2f(25.0f,25.0f); // v1
glVertex2f(50.0f,0.0f); // v2
glVertex2f(-50.0f,0.0f); // v3
glVertex2f(-75.0f,50.0f); // v4
glVertex2f(-25.0f,0.0f); // v5
glEnd();
环绕
顶点的指定次序以及方向的组合称为环绕,图中三角形是被认为具有顺时针方向的环绕。
在默认情况下,OpenGL认为逆时针方向环绕的一面是多边形的正面,因此图中的三角形为图形的反面。
如果想改变OpenGL这一默认行为,可以调用如下函数
glFrontFace(GL_CW); // GL_CW告诉OpenGL顺时针环绕的多边形被认为是正面
重新恢复为逆时针
glFrontFace(GL_CCW); // GL_CCW告诉OpenGL逆时针环绕的多边形被认为是正面,即默认情况
2. 三角形带
使用GL_TRIANGLE_STRIP图元,可以绘制一串相连的三角形。
构建当前三角形的顶点的连接顺序依赖于要和前面已经出现过的2个顶点组成三角形的当前顶点的序号的奇偶性(如果从0开始):
如果当前顶点是奇数:组成三角形的顶点排列顺序:T = [n-1 n-2 n].
如果当前顶点是偶数:组成三角形的顶点排列顺序:T = [n-2 n-1 n].
以上图为例,第一个三角形,顶点v2序号是2,是偶数,则顶点排列顺序是v0,v1,v2。第二个三角形,顶点v3序号是3,是奇数,则顶点排列顺序是v2,v1,v3,第三个三角形,顶点v4序号是4,是偶数,则顶点排列顺序是v2,v3,v4,以此类推。
这个顺序是为了保证所有的三角形都是按照相同的方向绘制的,使这个三角形串能够正确形成表面的一部分。对于某些操作,维持方向是很重要的,比如剔除。
注意:顶点个数n至少要大于3,否则不能绘制任何三角形。
3. 三角形扇
使用GL_TRIANGLE_FAN图元,可以创建一组围绕一个中心点的相连三角形。
GL_TRIANGLE_FAN与GL_TRIANGLE_STRIP类似,不过它的三角形的顶点排列顺序是T = [n-1 n-2 n].各三角形形成一个扇形序列。