第5篇 图形的层次结构.pptVIP

  • 35
  • 0
  • 约7.11千字
  • 约 34页
  • 2017-07-05 发布于湖北
  • 举报
第五章 图形的层次结构 现实世界中的客观对象都有一定的组织结构,用图形学来描绘实际的对象需要确定一定的图形结构(几何模型) 5.1 图形的层次结构概述 基本概念: 图形结构 也称为几何模型,是由具有明确几何定义的元素,如点、线、面等及其相互间连接关系组成。 图形层次结构的组成部分 几何及其他附属属性 物体及组成物体的基本元素的几何属性和其他影响外表 的属性,如颜色、线形和线宽等。 自底向上的设计方法 实例 5.2.1 面向对象的层次结构表示 将结构中的基本图素定义为类,并定义相应的数据和方法来实现基本图素,基本图素的类又可以通过对其增加和更新形成更高一层的图形部件 图形结构块 2. 图形结构块 class Block public Element{ char * name; CElement **eList; Block *next; void draw(){….} } 块的实例 3. 块的实例 class Instance public Element{ Block *pt; float dx, dy, rax,ray, sx, sy; } 把块的实例放在图中(所在的高层的块)的不同位置,这相对于世界坐标系来讲是一个平移变换。 同一个块在不同位置的实例其大小、方向和位置可以不同, 因此要在世界坐标变换基础上作一个局部的变换,这种局部变换就是我们第四章讲的变换。 块的实例 一般把块的中心放在坐标原点,通过局部变换产生放在不同位置及不同大小方向的实例 块的实例 这里并不要求专门建立局部坐标系的变换,我们还是可以用世界坐标中的变换来实现。在OpenGL中世界坐标系的二维变换为: glScale(sx,sy,0,0) 在x、y方向分别放缩sx及sy倍 glRotate(rax,ray,0,0) 旋转ra角 gltranslate(dx,dy,0,0) 在x、y方向分别平移dx、dy 5.2.2 面向对象的层次结构编辑 图形块的存取操作 5.2.2 面向对象的层次结构编辑 图形块的编辑操作 5.2.3面向对象的层次结构的讨论 由于面向对象的图形层次结构从存储结构上支持图形块的循环嵌套,因此在图形的显示、遍历等操作时有可能陷入死循环。但实际的图形结构是不可能出现循环嵌套的,这就要求在实现将图形块实例插入时,要进行必要的检查,避免出现循环嵌套。下面结合实例给出了一个具体的层次表示 5.2.3面向对象的层次结构的讨论 5.3.1 基本的结构函数 建立一个新的结构的过程 实例 下列程序定义了一个标号为6的绘制多边形的结构。 5.3.1 基本的结构函数 元素:一个结构中,介于openStructure及closeStructure二命令中的属性设置及图形输出命令称为元素。元素以先后次序从1开始有个编号。 5.3.1 基本的结构函数 postStructure(ws,id,priority) 在工作站ws上显示标号为id的结构。 priority是显示的优先级,在[0,1]中取值。 当两个结构在显示屏上重叠时,在重叠处显示优先级大的结构。 工作站ws可以是显示器或激光打印机等图形输出设备。 5.3.1 基本的结构函数 changeStructureIdentifier(oldID, newID); 重新标识一个结构 5.3.2 设置结构属性 setInvisibilityFilter(ws,devCode, invisSet, visSet) invisSet包括不可见的结构名, visSet包括可见的结构名。 不可见过滤器对于工作站上的结构起了开关显示的作用,因此不用将结构真正的从工作站表中删除。 5.3.3 结构编辑 如果需要在建立一个新的结构的元素后添加另外一些新的元素,只要再调用openStructure及closeStructure,并把要添加的元素写在它们中间即可。 5.3.3 结构编辑 在相继两次打开结构shape中,第一次调用closeStructure以后指针指在第三个元素, 图5.5 元素表 第二次调用openStructure(shape)以后便把它后续的元素加在元素指针下面的位置。这一系列操作等价于一次打开结构shape进行如下操作:。 openStructure(shape) setInteriorStyle(solid); setInteriorColourIn

文档评论(0)

1亿VIP精品文档

相关文档