计算机图形学(二)输出图元_11_OpenGL多边形填充区函数(下)

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的倍数,则多余的顶点将被忽略。
    将前面的四边形程序例中的顶点集重新安排,并将图元常量改为GL_QUAD_STRIP,我们得到图3.57(b)中一组相连的四边形。
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中,可用于此目的的图元有三角形带(triangle strip )、三角形扇形(triangle fan)和四边形
带(quad strip )。 高性能图形系统使用快速多边形硬件绘制,使得显示速度达到每秒形成百万以上的多边形(通常为三角形),包括使用表面纹理和特殊的光照效果。

    尽管OpenGL的核心函数库只允许凸多边形,但OpenGL的实用函数库(GLU)提供有关函数处理凹多边形和其他有线性边界的非凸对象。可使用一组GLU多边形细分子程序来将那些形状转换成三角形、三角形网络、三角形扇形和直线段。一旦那些形状被分解,就可以使用OpenGL函数进行处理。


图3.57用8个顶点显示四边形填充区:(a)用GL_QUADS生成两个不相
        连的四边形;(b)用GL_QUAD_STRIP生成三个相连的四边形


猜你喜欢

转载自blog.csdn.net/heyuchang666/article/details/51471337
今日推荐