第三章绘制基本图元.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章绘制基本图元

第三章 绘制基本图元 复杂的三维图形是由一个个简单的图元构成的,点和直线段是最简单的几何图元,此外还有多边形、圆,二次曲线、二次曲面、样条曲线、样条曲面等。 本章介绍OpenGL的输出图元及底层(设备级)实现算法,以便深层次地掌握图形绘制的原理和方法,提高计算机图形的制作水平。 3.1 坐标系统 计算机只能处理数据,为了能在屏幕上显示三维图形,必须将三维图形与数据相联系,将数据与三维图形联系在一起的唯一纽带,就是坐标。 为了描述图形,首先必须建立一个世界坐标系(二维或三维笛卡尔坐标系),在世界坐标系中给出图形对象的位置和方向,然后投影到显示设备的显示区域对应的二维平面上,并扫描转换到帧缓存的整数像素位置。 如可以通过两个端点定义一条直线段,通过一组顶点定义一个多边形。对象的坐标范围(x、y、z坐标的最大最小值)称为对象的包围盒,对于二维图形,坐标范围就是包围矩形。 屏幕坐标及图形坐标 显示器上的位置用整型的屏幕坐标来描述,与帧缓存中的像素位置相对应。坐标y值给出像素的行序号,x值给出列序号。 屏幕刷新硬件一般从屏幕的左上角开始对像素进行编址,从最上面的0行到最下面的ymax行,对扫描行进行编号;每行从左到右,从0到xmax按列进行编号。 图形软件可以按照任意方式设定屏幕位置的图形坐标系统,如可以设定屏幕区域的左下角为原点(视区的默认值),用整数坐标或非整数笛卡尔坐标来描述图形。描述物体对象的坐标值最终转换为帧缓存中的整数像素位置。 图元的扫描转换根据给定的坐标来确定要显示的像素位置,如给定一条直线段的两个端点,显示函数必须计算出两端点间位于线段上的所有像素的位置。 由于一个像素位置占有屏幕上的一个有限范围,因此图形显示算法必须考虑像素的有限大小,一般假定像素坐标对应于像素区域的中心。 屏幕上的笛卡尔坐标系 显示窗口 上一章的绘图实例中应用gluOrtho2D(xmin, xmax, ymin, ymax)函数设定了一个二维视见空间(二维笛卡尔坐标系),其参数指定了显示窗口的x、y坐标范围。 显示窗口的左下角位于坐标(xmin,ymin)处,右上角位于坐标(xmax,ymax)处。 如果一个图元的坐标范围完全在显示窗口内,该图元将完整地显示出来,否则,仅仅位于显示窗口范围内的部分图元能显示出来,这涉及到裁剪。 3.2 顶点及图元 在OpenGL中所有的几何物体最终都要描述成一个顶点的有序集合,包括单个点、线段的端点或多边形的顶点。 点由其坐标来描述,线是指线段,可由两个端点来描述,多边形是指由线段组成的封闭区域,由各线段的端点来描述。 要绘制一个三维点,只需在世界坐标系中指定该点的坐标,OpenGL按指定的大小和颜色来显示这个点,默认的颜色为白色,默认的大小为一个屏幕像素大小,屏幕上绘制的像素是一个正方形区域。 多边形常常通过充填其内部的像素来显示,也可以显示其轮廓线。一般而言,多边形可能很复杂,所以OpenGL对多边形做了一些强制限定。首先,多边形的边不能相交,其次多边形必须是凸的,如果指定一个非凸的多边形,将绘出意想不到的结果。对多边形类型作出限制,是为了提高绘制多边形的速度和性能。 由于顶点一般是三维的,如果多边形的顶点并不处于同一平面内,经过一系列旋转及改变视点后,这些点将不再组成一个简单的凸多边形, OpenGL无法保证这个多边形得到正确绘制。一般可以通过一系列三角形来逼近多边形,因为三角形的三个顶点肯定位于同一个平面内。 指定顶点坐标 OpenGL中,可以使用函数glVertex()指定顶点的坐标,但顶点既可以是一个纯粹的点,也可以是线段的端点,还可以是多边形的角点, OpenGL中共有10种图元,必须明确指明这些顶点构成何种图元。 OpenGL中将每组顶点放在函数glBegin() 和glEnd()之间,由glBegin() 的参数来指定相应的几何图元,然后调用glEnd()来结束这组顶点的定义。 几何图元的参数和含义 绘制三维点 例3-1(POINTS)绘制一系列的三维点,使它们沿Z轴形成一个螺旋圈。 glBegin(GL_POINTS); z = -50.0f; for(angle = 0.0f; angle = (2.0f*GL_PI)*3.0f; angle += 0.1f) { x = 50.0f*sin(angle); y = 50.0f*cos(angle); // Specify the point and move the Z value up a little glVertex3f(x, y, z); z += 0.5f; } // Done drawing points glEnd(); 点的属性 点的属性包括颜色和大

文档评论(0)

word.ppt文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档