本文介绍绘制多边形的基本语句。 OpenGL提供了描述点、线、多边形的机制。它们通过glBegin()和glEnd()的配对 来完成。glBegin()有一个GLenum的参数,它可以为如下10个常量: GL_POINTS,GL_LINES,GL_LINE_STRIP(折线), GL_LINE_LOOP(封闭线),GL_TIANGLES, GL_TRIANGLE_STRIP(连续画三角),GL_TRIANGLE_FAN(三角形扇), GL_QUADS,GL_QUAD_STRIP,GL_POLYGON 当glBegin()函数的参数为GL_POINTs时,表示在glBegin()和glEnd()函数对之间将 绘制点。如: glBegin(GL_POINTS) glVertex2f(0.0f,0.0f);//定义二维点 glVertex3f(0.1f,0.2f,0.3f);//定义三维点 glEnd(); 为了获取被设备支持的点的大小的范围,OpenGL提供了glGet()函数,采用如下语句获 得点的大小范围。 GLfloat fPointSize[2]; glGetFloatv(GL_POINT_SIZE_RANGE,fPointSize); glGetFloat()函数的第一个参数必须是OpenGL常量,第二个参数是数组的地址。函数按第一个参数的指示向第二个参数所指地址传输数据,fPointSize[0]存储点的大小的最小值,fPointSize[1]存储点的大小的最大值。 (1)采用如下语句获取当前点的大小 GLfloat fCurrentPointSize; glGetFloatv(GL_POINT_SIZE,&fCurrentPointSize) (2)将glBegin()函数的参数设为GL_Lines,便可以用glBegin()/glEnd()函数lai绘制直线。如: glBegin(GL_LINES) glVertex2f(0.4f,0.4f); glVertex2f(0.0f,-0.4f); glEnd(); 通过glLineWidth()来自定义线的宽度,如:glLineWidth(2.0f)申明了两个像素作为线的宽度 (3)通过如下语句确定线的宽度: GLfloat fLineWidth[2]; glGetFloatv(GL_LINE_WIDTH_RANGE,fLineWidth); fLineWidth中存放线宽的最小值和最大值。 (4)OpenGL通过glLineStipple()函数来获取所定义的线型。 (5)为了使所获取的线型被OpenGL支持,必须事先启动改变线型的机制 glEnable(GL_LINE_STIPPLE); 当不再使用自定义的线型时,应将功能关闭 glDisable(GL_LINE_STIPPLE); (6)在OpenGL中,glEnable()是一个重要的函数,通过该函数可以启动OpenGL的许多特定功能。 (7)glBegin()函数的参数为GL_LINE_LOOP时在glBegin()和glEnd()之间绘制闭合折线。 glBegin(GL_LINE_LOOP) glVetex2f(-0.3f,0.0f); glVetex2f(0.8f,0.0f); glVetex3f(0.0f,0.8f); glEnd(); 此处折线的闭合由函数完成,最后一个点不必是第一个点。 (8)在OpenGL中,一个多边形至少有3个顶点。直线不能相交,多边形应构成单连通 的凸区域。一个多边形有前面和后面之分,前面和后面可以有不同的属性。 (9)一个多边形的前面和后面是需要指定的,可以通过其顶点的顺序来确定,缺省的逆 时针排列的顶点定义的多边形是前面的。 (10)OpenGL提供函数glFrontFace()来指定多边形的前面。函数参数只能为GL_CW或 GL_CCW, GL_CW表示按顺时针定义的多边形是前面的, GL_CCW表示按逆时针定义的多边形是前面的。 (11)OpenGL允许用户采用一个32*32的位图对多边形进行填充。 (12)位图可以用如下结构定义: Glubyte polygonFillPattern[]={ }; (13)一旦完成模式的自定义,就可以用glEnable(GL_POLYGON_STIPPLE)通知OpenGLdui改变了的填充模式进行响应。 (14)如果要回到通常的填充模式,只需用用glDisable(GL_POLYGON_STIPPLE)终止自定义的填充模式。 (15)应用多边形填充模式,可以进行半透明处理,淡入淡出效果处理等。 (16)用GL_TRIANGELS来完成三角形的绘制。 glBegin(GL_TRIANGLES) glVertex2f(-0.5f,0.4f); glVertex2f(-0.6f,-0.5f); glVertex2f(0.5f,-0.5f); glEnd(); (17)当glBegin()的参数为GL_TRIANGLE_STRIP时,可以画一系列的三角形,称其为三角形片。在glBegin()/glEnd()函数对中,采用顶点描述三角形时,前三个顶点描述了第一个三角形,之后每加入一个顶点就延伸出一个三角形,第二个三角形由第二三四三个顶点构成。 (18)在OpenGL中,可以用多个三角形构成三角形扇,glBegin()/glEnd()函数对的前三个顶点定义了第一个三角形,自后每增加一个顶点就增加一个三角形,由第一个顶点作为扇心。 (19)应用GL_QUADS参数可以画一组四边形,绘制时要注意四边形顶点的排列顺序。 (20)应用参数GL_QUAD_STRIP,在glBegin()/glEnd()函数对中,前四个顶点定义第一个四边形,之后每加入两个顶点就加入一个四边形。 (21)要绘制如图所示的凹多边形,可用通过绘制两个组合的四边形,但是会产生一条本不存在的边3-4,因而需要对这条边加以隐藏。 (22)OpenGL通过glEdgeFlag()函数来说明边的可见性。该函数位于两个glVertex()函数之间,说明由这两点构成的边的可见性。参数为TRUE可见,FALSE不可见。 (23)一旦确定了glEdgeFlag()函数的参数,此后所绘制的边的可见性就不会发生改变,除非再次调用glEdgeFlag()函数。 (25)一个物体无论其表面形状多么复杂,计算机都将它视为由若干个小面组成的,通常小面采用三角形或四边形。 首先对曲面进行网格划分,称有限单元化;其次要获得网格的各个顶点坐标,并对顶点进行数学描述形成单个面,通过面循环构成整个物体的拓扑结构;对顶点赋予颜色、纹理、法线等信息;最后将以上操作的结果作为输入信息传递给OpenGL。
绘制多边形的基本语句
最新推荐文章于 2025-03-14 17:08:10 发布