标签:
OpenGL多边形填充区函数(下)
除了三角形和一般多边形的图元函数,OpenGL还可描述两类四边形。用GL_QUADS图元常量和下面两维坐标数组指定的8个顶点,可生成图3.57(a)的显示结果。
glBenin (GL_QUADS); glVertex2iv (p1); glVertex2iv (p2); glVertex2iv (p3); glVertex2iv (p4); glVertex2iv (p5); glVertex2iv (p6); glVertex2iv (p7); glVertex2iv (p8); glEnd();前面四个点定义一个四边形的顶点,接下来四个点定义下一个四边形,依次类推。我们为每一个四边形填充区指定逆时针次序的顶点位置。如果没有重复的顶点位置,则显示一组不相连的四边形填充区。使用该图元时至少要列出四个顶点,否则什么也不显示。而如果指定的顶点数不是4的倍数,则多余的顶点将被忽略。
glBenin (GL_QUAD_STRIP); glVertex2iv (p1); glVertex2iv (p2); glVertex2iv (p4); glVertex2iv (p3); glVertex2iv (p5); glVertex2iv (p6); glVertex2iv (p8); glVertex2iv (p7); glEnd();在先指定两个顶点后,每个四边形用再两个顶点指定,而且我们必须列出能使每一个四边形获得正确的逆时针顶点次序的顶点集。在N>=4时,N个顶点可生成N/2-l个四边形。如果N不是4的倍数,顶点集中多余的坐标位置则不被使用。我们可按n=1, n=2,.....,n = N/2-1对填充多边形和顶点计数。这样,多边形表中第n个四边形的顶点次序为2n-1, 2n , 2n+2 , 2n+1。在本例中,N=8因而有三个四边形组成一个带。因此,第一个四边形(n = 1)的顶点次序为(p1, p2, p3, p4)。第二个四边形(n=2)的项点次序为((p4, p3, p6, p5)。而第三个四边形(n=3)的顶点次序为(p5,p6,p7,p8)。
尽管OpenGL的核心函数库只允许凸多边形,但OpenGL的实用函数库(GLU)提供有关函数处理凹多边形和其他有线性边界的非凸对象。可使用一组GLU多边形细分子程序来将那些形状转换成三角形、三角形网络、三角形扇形和直线段。一旦那些形状被分解,就可以使用OpenGL函数进行处理。
图3.57用8个顶点显示四边形填充区:(a)用GL_QUADS生成两个不相
连的四边形;(b)用GL_QUAD_STRIP生成三个相连的四边形
计算机图形学(二)输出图元_10_多边形填充区_7_OpenGL多边形填充区函数(下)
标签:
原文地址:http://blog.csdn.net/heyuchang666/article/details/51471337