【学习OpenGL】(四)——3D空间中的三角形

1. 三角形

GL_TRIANGLES图元通过连接三个顶点绘制三角形,得到如图所示的三角形

glBegin(GL_TRIANGLES);
    glVertex2f(0.0f0.0f);    // v0
    glVertex2f(25.0f25.0f);  // v1
    glVertex2f(50.0f0.0f);   // v2

    glVertex2f(-50.0f0.0f);   // v3
    glVertex2f(-75.0f50.0f);  // v4
    glVertex2f(-25.0f0.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].各三角形形成一个扇形序列。

猜你喜欢

转载自blog.csdn.net/qq_37308779/article/details/79344518