glRect* (x1, y1, x2, y2);
该矩形的一个角位于坐标位置(x1,y1)处,而与其相对的一角位于坐标位置(x2,y2)处。glRect的后缀
码指出坐标数据类型及是否用数组元素来表示坐标。这些编码是i(整数)、s(短整数)、f(浮点
数)、d(双倍长浮点数)和v(向量)。矩形的边平行于xy坐标轴。作为一个例子,下面的语句定
义了图3.55中给出的正方形:
glRecti (200, 100,50, 250);
如果将坐标值放在数组中,可用下列语句生成同样的正方形:
int vertex1 [] = { 200, 1000};
int vertex2 [] = { 50, 250};
glRectv (vertex1, vertex2);
利用函数glRect生成矩形时,多边形的边按顶点序列(x1,y1)、(x2,y1)、(x2,y2)、(x1,y2)来形成,
后返回到第一顶点(x1,yl)。在该例子中,我们生成了顺时针次序的顶点集。在许多二维应用中,前
向面和后向面的确定是不重要的。但如果确实要将不同的特性赋给矩形的前向面和后向面,那就应
该将本例中的两个顶点次序倒过来从而得到逆时针的顶点次序。第4章将讨论另一种可以颠倒前向
glBenin (GL_POLYGON);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p3);
glVertex2iv (p4);
glVertex2iv (p5);
glVertex2iv (p6);
glEnd();
一个多边形的顶点集至少包含三个顶点,否则什么也不显示。
glBenin (GL_TRIANGLES);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p3);
glVertex2iv (p4);
glVertex2iv (p5);
glVertex2iv (p6);
glEnd();
此时,前面三个坐标点定义一个三角形的顶点,后面三点定义下一个三角形,依次类推。对于每一个三角形填充区,我们指定逆时针次序的顶点位置。除非重复使用某些顶点,否则该图元常量仅显示不相连的三角形。如果顶点数小于3,则什么也不显示。而如果指定的顶点数不是3的倍数,则最后一个或两个顶点没有用。
glBenin (GL_TRIANGLE_STRIP);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p6);
glVertex2iv (p3);
glVertex2iv (p5);
glVertex2iv (p4);
glEnd();
假定在N个顶点的集合中没有重复的坐标位置,可获得N-2个三角形的带。很清楚,必须有N >= 3,否则什么也不显示。在该例子中,
N=6,得到4个三角形。每一后继三角形共享前面定义的三角形的一条边,因此顶点次序的设定必须保证显示的一致性。一个三角形在前面两个顶点的基础上再加一个顶点来定义。
因此,最前面三个顶点必须按从前面(外部)观察三角形表面时的逆时针次序列出。随后,顶点表中用于另外三个三角形的三个顶点安排成顺时针次序。这通过按次序n=1,n=2....n = N-2处理顶点集中的位置n,并按n是否为奇数或偶数确定相应的三顶点集次序来实现。如果n是奇数,三角形顶点的多边形列表次序是n 、n+1、 n+2。如果n是偶数,则三角形顶点次序为。n+l、n、n+2。在前面的例子中,第一个三角形(n=1)的顶点次序为(p1, p2, p6)。第二个三角形(n = 2)的顶点次序为(p6, p2, p3)。第三个三角形(n=3)为(p6, p3, p5)。多边形表中第四个三角形(n=4)的顶点次序为(p5, p3, p4)。
glBenin (GL_TRIANGLE_FAN);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p3);
glVertex2iv (p4);
glVertex2iv (p5);
glVertex2iv (p6);
glEnd();
N个顶点可获得N-2个三角形,不需要重复使用任何顶点,但必须至少列出三个顶点。另外,必须合适地描述顶点次序,以便正确定义每一个三角形的前向面和后向面。第一个列出的顶点(此时为pl )是扇形中每一三角形共享的顶点。如果再按n=1,n=2,...,n=N-2来计算多边形和坐标位置,则多边形表中第n个三角形的顶点次序为1, n+1 , n+2。因此,三角形1由顶点集(p1,p2,p3)定义;三角形2的顶点次序为(p1, p3, p4);三角形3的顶点次序为(p1,p4,p5);而三角形4的顶点集为(p1,p5,p6)。