- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2讲基本图元
任何复杂的三维模型都是由基本的几何图元:点、线段和多边形组成的,有了这些图元,就可以建立比较复杂的模型。因此这部分内容是学习OpenGL编程的基础。 一、基本图元的描述及定义 OpenGL图元是抽象的几何概念,不是真实世界中的物体,因此须用相关的数学模型来描述。所有的图元都是由一系列有顺序的顶点集合来描述的。OpenGL中绘制几何图元,必须使用glBegain()和glEnd()这一对函数,传递给glBegain()函数的参数唯一确定了要绘制何种几何图元,同时,在该函数对中给出了几何图元的定义,函数glEnd()标志顶点列表的结束。例如,下面的代码绘制了一个多边形:
glBegin(GL_POLYGON);glVertex2f(0.0,0.0);glVertex2f(0.0,3.0);glVertex2f(3.0,3.0);glVertex2f(4.0,1.5);glVertex2f(3.0,0.0);glEnd(); 函数glBegin(GLenum mode)标志描述一个几何图元的顶点列表的开始,其参数mode表示几何图元的描述类型,具体类型见表一:
类型 说明 GL_POINTS 单个顶点集 GL_LINES 多组双顶点线段 GL_POLYGON 单个简单填充凸多边形 GL_TRAINGLES 多组独立填充三角形 GL_QUADS 多组独立填充四边形 GL_LINE_STRIP 不闭合折线 GL_LINE_LOOP 闭合折线 GL_TRAINGLE_STRIP 线型连续填充三角形串 GL_TRAINGLE_FAN 扇形连续填充三角形串 GL_QUAD_STRIP 连续填充四边形串 表一、几何图元类型说明 部分几何图元的示意图:
图一、部分几何图元示意图 在glBegin()和glEnd()之间最重要的信息就是由函数glVertex*()定义的顶点,必要时也可为每个顶点指定颜色(只对当前点或后续点有效)、法向、纹理坐标或其他,即调用相关的函数:
函数 函数意义 glColor*() 设置当前颜色 glIndex*() 设置当前颜色表 glNormal*() 设置法向坐标 glEvalCoord*() 产生坐标 glCallList(),glCallLists() 显示列表 glTexCoord*() 设置纹理坐标 glEdgeFlag*() 控制边界绘制 glMaterial*() 设置材质 表二、在glBegin()和glEnd()之间可调用的函数 需要指出的是:OpenGL所定义的点、线、多边形等图元与一般数学定义不太一样,存在一定的差别。一种差别源于基于计算机计算的限制。OpenGL中所有浮点计算精度有限,故点、线 、多边形的坐标值存在一定的误差。另一种差别源于位图显示的限制。以这种方式显示图形,最小的显示图元是一个象素,尽管每个象素宽度很小,但它们仍然比数学上所定义的点或线宽要大得多。当用OpenGL进行计算时,虽然是用一系列浮点值定义点串,但每个点仍然是用单个象素显示,只是近似拟合。 二、点(Point) 用浮点值表示的点称为顶点(Vertex)。所有顶点在OpenGL内部计算时都使用三维坐标(x,y,z)来处理,用二维坐标(x,y)定义的点在OpenGL中默认z值为0。顶点坐标也可以用齐次坐标(x,y,z,w)来表示,如果w不为0.0,这些齐次坐标表示的顶点即为三维空间点(x/w,y/w,z/w),一般来说,w缺省为1.0。 可以用glVertex{234}{sifd}[V](TYPE cords)函数来定义一个顶点。例如:
glVertex2f(2.0f,3.0f);//二维坐标定义顶点; OpenGL中定义的点可以有不同的尺寸,其函数形式为:
void glPointSize(GLfloat size); 参数size设置点的宽度(以象素为单位),必须大于0.0,缺省时为1.0。 三、线(Line) 在OpenGL中,线代表线段(Line Segment),它由一系列顶点顺次连结而成。具体的讲,线有独立线段、条带、封闭条带三种,如图二所示:
图二、线段的三种连结方式 OpenGL能指定线的宽度并绘制不同的虚点线,如点线、虚线等。相应的函数形式如下: 1、void glLineWidth(GLfloat width); 设置线宽(以象素为单位)。参数width必须大于0.0,缺省时为1.0。 2、void glLineStipple(GLint f
文档评论(0)