绘制多边形的基本语句

 

本文介绍绘制多边形的基本语句。

 

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值