英语原文共 9 页,剩余内容已隐藏,支付完成后下载完整资料
一个面向对象的3D图形工具包
Paul S. Strauss
Rikk Carey
Silicon Graphics Computer Systems
2011 North Shoreline Blvd
Mountain View, CA 94039-731 I
摘要
本文介绍了一个面向对象的工具包--交互式3D图形应用程序。 该工具包的主要目标是为了让程序员更容易创建3D图形应用程序,除了传统的2D部件之外,它还采用直接操作技术。 在以前的图形包和系统中,这种技术通常被忽略。
该工具包提供了一种通用的和可扩展的框架,用于表示3D场景,从而应用程序可以将其数据与图形对象集成,而不是复制副本。它还包括一个简单的、集成的事件模型,该模型能够直接与3D对象交互。
CR类别和主题描述
1.3.2图形系统;
1.3.4图形实用程序,应用程序包,图形包:
1.3.6方法和技巧 - 互动技巧;
1.3.7三维图形和现实主义。 动画
关键词
交互式3D图形,面向对象设计,场景表示,直接操作。
介绍
传统上编写交互式3D图形应用程序是一个单调乏味,费时费力且艰巨的任务而且需要程序员具有高水平的专业知识。因为它非常困难,所以开发人员和研究人员要么在低级图形命令之上发明自己的软件抽象,要么制作便携式的“最低公分母”应用程序,而只有很少或没有直接的3D交互。 前者的选择产生短期的影响,很少给予足够的设计和实施努力。 后一种方法在工业中更为常见,导致不相交的用户界面。其中用户查看3D区域,只能通过远程用户界面小部件或键盘命令语言进行交互。
3D图形工具包可以方便编写交互式应用程序。 一个真正的交互式3D工具包应该提供丰富和可扩展的三维对象集,并且应该支持直接操作,允许用户在同一窗口中与这些对象进行交互,这种技术在2D图形应用中很常见, 但它很少出现在3D应用程序中。一个工具包可以支持开发这种交互式3D程序的三个基本领域:
对象表示:图形数据应该存储为可编辑对象,而不仅仅是用于表示它们的绘图基元的集合。 也就是说,应用程序应该能够指定它是什么,而不必担心如何绘制它。
互动:直接交互式编程的事件模型必须与图形对象的表示形式结合在一起。
结构:应用程序不应该适应工具包强加的对象表示或交互策略。 相反,工具包机制应该用来实施所需的策略。 这种灵活性还应体现在必要时扩展工具包的能力。
传统的3D图形应用系统可以被描述为采用两种方法之一来进行对象表示。 GKS [3]和PHIGS [6]表示列表方法,其中对象被定义为绘图命令的序列,不能被视为一流3D对象。 Dor6T〜[I]和HOOPST〜[9]通过提供额外的编辑功能显着改善了显示列表模型,但它们仍然没有达到真正的3D对象表示功能。
即时模式库,如Iris GLTM [2],StarbaseT〜[7]和RenderManT〜[8]是流线型绘图软件包; 他们没有保留或代表3D对象的概念(尽管CL和Starbase也支持显示列表)。 这些库专注于为特定的图形设备或程序提供灵活和高效的接口。
这两种方法的主要问题是,他们只专注于应用程序编写的渲染或显示方面(一项有价值的任务,特别是考虑到20世纪70年代和80年代渲染硬件和算法的进步)。 然而,渲染只是编写交互式应用程序任务的一小部分。 3D图形软件包大部分都忽略了用户输入; 他们通常只提供粗略的对象选择。 此外,这些软件包的编程模型不会将3D对象视为几何,物理实体。因此,以前的系统致力于面向显示的应用程序开发,并且对直接3D交互支持提供的帮助很少。
传统图形软件包的另一个缺点是它们激增了“重复数据库”问题。 应用程序以适合他们需要的形式存储它们的对象,但必须将它们转换为图形包所需的结构,并保留一个额外的副本。 此外,图形包通常是封闭系统,不允许应用程序添加其自己的对象几何图形,属性或操作。
很少有公开的3D工具包的描述试图解决这里提出的问题。 InterViews [5]系统成功集成了2D图形和文本世界中的渲染和交互,但它不会扩展到3D。 布朗动画生成系统[10]是一个已发布的成功整合了抽象的3D对象表示和动态的系统。它主要为动画设计,但确实包含对交互技术的支持。
本文描述的工具包试图满足上述需求。 它定义了一个面向对象的框架,用于描述包含3D对象和对它们的操作。 3D对象是可以在请求时呈现自己的抽象表示; 它们不仅仅是显示列表。 通过哪些方法进行对象渲染可能因机器而异,但它们的表示是恒定的。
该工具包的框架设计时考虑到了应用程序的可扩展性。 应用程序编写者能够在必要时将新的特定于应用程序的对象添加到工具包中。 通过允许将应用程序数据合并到工具包中,重复数据库的需求大大减少。 可扩展性还包括对象操作,诸如新的渲染方法和几何计算等。
该工具箱集成了一个简单而有效的将事件传递给3D对象的模型。 提供了多个交互式3D对象,使应用程序可以轻松地添加交互式操作(如旋转)。 这套交互式对象也是可扩展的,工具包提供了多种级别的支持,使应用程序可以轻松创建自己的对象以进行直接交互。
概观
3D工具箱库由三个主要部分组成,如图1所示。此外,在工具箱的顶部建立了两个窗口系统实用程序库,用于提供窗口对象和处理事件转换。
图1.整体工具包体系结构
三个工具包部分都提供了不同级别的编程支持。 这里按照从低级到高级的顺序介绍它们。
3D工具包的基础是场景数据库。 它将3D场景的动态表示存储为称为节点的对象的图形(通常是有向无环图)。 各种类型的节点实现不同的几何,属性和数据库遍历行为。 数据库提供一组可应用于场景或场景的一部分的操作;例如渲染,挑选,计算边界框,处理事件和写入文件。 数据库定义了在场景中存储和检索场景的格式和方法, 还包括用于将动画添加到场景以及跟踪对其进行更改的对象。
工具包的交互部分引入了事件类和处理事件的“智能”节点。事件类定义了一组可扩展的抽象事件,如ButtonEvent和Location2-Event。智能节点的一个例子是选择节点,它为应用程序维护所选对象列表提供了一种简单方法。选择跟踪,支持用于替换和扩展选择的各种策略,并以图形方式突出显示所选对象。另一种类型的智能节点是操纵器,它响应交互事件并编辑数据库中的其他节点。操纵器通常采用代理对象(例如,边界,球体或盒子),它可视化地表示操纵器,并提供将事件转换为数据库更改的手段。例如,Trackbal 1操纵器使用围绕对象的边界球来修改对象的旋转。其他操纵器执行对象特定的功能,例如更改光源的展开方向或拖动多面体形状的顶点。操纵器为应用程序提供了一种简单的方式来结合直接的3D交互。
该工具包的第三部分定义了节点工具包,可以更轻松地创建结构化的,一致的数据库。 每个节点套件对象都将一些场景数据库子图,附件规则和其他策略组合到一个类中。 例如,SphereKit是一个围绕球体节点的包装,可在需要时在正确的位置添加材质,几何变形和其他属性。节点套件还允许程序员创建封装特定于应用程序的行为的更高级对象。
请注意,3D工具包本身不包含任何代表显示屏幕上的窗口的对象。 做出这个决定是为了确保窗口系统的独立性和更好的可移植性。 连接到特定窗口系统(例如X和GL)的安全资料库建立在工具箱之上,以便为应用程序员提供便利。 每个实用程序库都提供了一个基本的RenderArea对象,该对象维护一个可调整大小的窗口,该窗口可处理自动重绘,将窗口系统事件转换为工具箱事件,并将事件分发给窗口中呈现的对象。 此外,实用程序库还可以提供一组实现常用交互功能的应用程序级组件。例如颜色编辑器,表面材料编辑器,光源编辑器和查看器,它们处理用户交互以编辑相机。
结构
3D工具包以C 实现,它支持许多面向可扩展系统的面向对象的范例。 还提供了C绑定,虽然很多可扩展性不能从C中获取。
节点
场景数据库中的每个节点执行一些特定的功能。有形状节点代表几何或物理对象(见图7),适当的节点描述这些对象的各种属性(见图8), 以及将其他节点连接成图形和子图的组节点。 其他节点,例如照相机和灯,也提供。 表1给出了节点类别的代表性抽样。
形状节点: 组节点:
锥体 组
立方体 分隔器
圆筒 开关
面对集合 选择
索引面集 操作者
索引线集
索引三角
线集
努尔曲线 属性节点:
努尔曲面点集 底色
四边形 复杂性
求 坐标系
文本2 绘画风格
文本3 环境
三角条带 字体
光照模型
光/相机节点: 光/摄像机节点
正照射相机 材料
透视摄像机 材料绑定
平行光 标准
点光源 标准绑定
聚光灯 文本2
文本协调2
变换
表1. 一些节点类
存储在子对象的节点中特定于实例的信息称为领域。每个节点类都定义了一些字段具有与其相关的特定值类型。 例如,圆柱体形状节点包含两个实数(浮点)字段,它们表示特定圆柱体实例的半径和高度。 Field对象为编辑,查询,读取,写入和监控节点内的实例数据提供了一致的机制。
这组节点旨在允许在可能的情况下共享大部分大容量数据。 例如,坐标和法向矢量在可以在各种形状之间共享的单独(属性)节点中指定。 该方案具有执行表示一致性的额外好处。
各种组节点类将节点连接成图形。 每个组节点类都确定是否以及如何遍历子节点以及如何继承属性。 节点通常从其父节点继承属性,并且组节点的子节点通常从先前的兄弟节点继承。 一些组提供从组节点到其父节点的继承,使得子节点中的属性插入变得简单。 其他组,例如Separator节点,在遍历子节点之前保存状态和恢复状态,从而将它们的影响与图的其余部分隔离。
这些组代表大多数3D系统中的传统分层分组对象,但也可以实施其他行为。 例如,Switch节点选择其中一个子节点进行遍历; 这对于实现详细信息很有用,例如,Array节点多次遍历子节点,在每次遍历之前应用变换以将结果排列在3D数组中。
图2描绘了渲染结果出现在图9中的场景图。
图2.一个简单的场景图
路径
节点可能是多个组的子节点,允许共享公共子图(多个实例)。 例如,自行车模型可以使用代表车轮两次的子图,并将不同的变换节点应用于车轮的每个实例。 该方案可以导致场景表示在许多情况下更紧凑和可管理。缺点是,通过指向单个节点,并不总是可以毫不含糊地指向3D场景中的物体(例如后轮车轮)。 为了解决这个问题,该工具包支持path对象,这些对象指向从图中某个节点到所讨论节点的链中的节点(参见图3)。 例如,执行拾取操作会返回从图形的红色到光标下的形状节点的路径,明确指示拾取的对象。
请注意,路径实际上定义了一个不仅仅是连接的节点链组成的子图。 该子图还包括链中最后一个节点下方的所有节点(
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[467743],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。