收藏 分销(赏)

基于OpenGL和面向对象技术的三D交互系统的研究样本.doc

上传人:精*** 文档编号:4659592 上传时间:2024-10-08 格式:DOC 页数:9 大小:30.50KB 下载积分:6 金币
下载 相关 举报
基于OpenGL和面向对象技术的三D交互系统的研究样本.doc_第1页
第1页 / 共9页
基于OpenGL和面向对象技术的三D交互系统的研究样本.doc_第2页
第2页 / 共9页


点击查看更多>>
资源描述
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 OpenGL( Open Graphics Library) 定义了一个跨编程语言、 跨平台的编程接口的规格, 是个专业的图形程序接口, 是一个功能强大, 调用方便的底层图形库。它是行业领域中最为广泛接纳的 2D/3D 图形 API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。它是独立于视窗操作系统或其它操作系统的, 亦是网络透明的。在包含CAD、 内容创作、 能源、 娱乐、 游戏开发、 制造业、 制药业及虚拟现实等行业领域中, OpenGL帮助程序员实现在 PC、 工作站、 超级计算机等硬件设备上的高性能、 极具冲击力的高视觉表现力图形处理软件的开发。 一、 图形标准OpenGL及其高级开发工具 图形标准在图形领域有着重要的地位, 是很多大公司与机构争夺的法宝。历史上曾出现的图形标准有Core、 GKS、 PHIGS、 PEX、 GL、 Dore、 RenderMan、 Hoops、 OpenGL等等。经过了竞争与淘汰, 当前OpenGL占据了领导地位, 成为国际上公认的3D图形工业标准。SGI公司是赢家, 它于1990年着手研制OpenGL。1992年OpenGL体系结构委员会制定了1.0规范, 1995年推出1.1规范。1998年OpenGL 1.2在SGI平台实现。OpenGL及其应用程序已在Unix与PC平台得到广泛的应用。 图形标准存在显而易见的优点: 它不但加速了3D应用程序的开发, 而且使应用程序的可移植性更好。可是标准亦存在着缺点, Andries Van Dam 指出: ”标准是很多人经过多年的努力共同创立的, 它的规范与实现总是落后于最新技术。经验表明, 绝大多数领域最先进的设计都是极小数精英小组创作的, 可是标准却是一个庞大委员会的技术、 政治折衷的产物”[Dam 1998]。 OpenGL的发展已近 , 从1.0版本到1.2版本在功能上并无显著的变化。在开发交互式3D图形应用程序方面, OpenGL存在明显的不足: ( 1) OpenGL与窗口系统无关, 不提供任何交互手段, 必须由程序员自己编写所有的交互功能。 ( 2) OpenGL应用程序性能的优化是程序员面临的一大困难。OpenGL的API( 编程接口) 非常灵活, 不但针对硬件与软件的优化方法多而相异, 即便对于同一数据结构或算法, 如果代码的组织不同亦会产生显著的性能差异。 ( 3) OpenGL 的API是低级的C函数, 不提供可复用的对象库或者应用程序框架, 开发效率不高。 以上几点表明, 除非开发人员既精通图形系统又精通窗口系统的编程, 否则难以开发出较好的基于OpenGL的交互式3D应用程序。由于标准不能被轻易创立与修改, 它往往跟不上技术的发展与市场的变化。而3D图形是迅猛发展的领域, 为了克服这个困难, 人们往往在图形标准之上再建立更高级的开发工具( 3D Toolkit或3D Engine) 。 基于OpenGL的著名的开发工具有: 1、 Open Inventor Open Inventor 是从SGI的Iris Inventor发展而来, 适合于开发面向对象的交互式3D图形应用程序。其核心是围绕 Scene Graph的庞大的C++ 类库, 它提供场景编辑、 交互式绘制、 文件输入输出等功能以及相应的图形用户界面。Open Inventor是通用的商业化软件, 由Open Inventor体系结构委员会制定标准, 能够在多个平台运行。PC平台的Open Inventor由TGS公司开发与销售。[Wernecke 1994] [Wang 1997] Open Inventor的基本特征是”大而全”, 如果你只要开发很小的3D应用程序, 使用Open Inventor就象让相扑运动员去干针线活那样笨。 2、 Iris Performer Iris Performer 是高性能实时3D图形开发系统, 由SGI公司研制, 专用于SGI的高档图形工作站。Iris Performer 提供高层的场景结构, 支持多CPU、 场景多层次细节( LOD) 管理。不提供用于3D交互的图形用户界面。[Rohlf 1994] Iris Performer我只听说过但没有亲手用过。总统套房好是好, 可老百姓住不起。 3、 OpenGL Optimeizer/Cosmo3D OpenGL Optimeizer/Cosmo3D 是面向大型CAD/CAE与可视化应用的开发系统, 由SGI公司研制。它能够将大型复杂的造型简化, 并快速地绘制。但由于该产品推出的时间不长, 短期内难以被广泛采纳。[Paul 1997] 所有的新产品都说自己好而且对用户”必不可少”, 但用户总免不了疑神疑鬼, 还是等它成熟了再用。 4、 GLUT GLUT 的核心是个小型的C函数库, 这些函数能够创立OpenGL窗口、 弹出菜单、 响应鼠标事件, 并能够绘制简单的常见几何形体。GLUT 可在X-Window, Windows NT, OS/2等系统下运行, 特别适合于开发不需要复杂界面的OpenGL示例程序。GLUT的源程序是公开的, 而且提供了百余个出众的示例程序, 可帮助用户进一步了解OpenGL。[Paul 1997] [Kilgard 1996] 由于Open Inventor在Unix与PC平台得到了广泛的应用, 被誉为是交互式3D开发工具的”事实标准”。但显然没有一个3D开发工具能满足所有的应用需求, 3D的广泛应用需要更多的开发工具支持。当前在Internet上能够搜索到的各种用途的3D Engine有500多个[Engines], Open Inventor能够更精确地归类于”object oriented drawing and document editing system” [Kochhar 1996]。 二、 基于OpenGL的交互式三维图形软件开发工具 1、 Intra3D 2.0 开发背景 随着计算机图形技术与网络技术的迅猛发展, 两者的结合势在必行。在商业、 科研、 教育、 娱乐等领域, 用于分布式虚拟环境和支持协同工作的图形系统已成为研究与应用的热点著名的DVEs系统有DIVE、 dVS、 MR、 Repo-3D等。可是这些DVEs系统缺乏3D开发工具的交互式图形功能以及通用性, 而通用的3D开发工具如Open Inventor则又不支持分布式计算和协同工作。由于在窗口系统、 图形支撑库、 编程语言等方面存在差异, 上述DVEs系统和3D开发工具难以方便地结合使用。为了紧跟发展潮流, Intra3D 2.0一款基于OpenGL的交互式三维图形软件开发工具应运而生。 2、 Intra3D 2.0数据流可视化平台 Intra3D 2.0多方面分析了3D的需求及软硬件条件研制完成了自主版权、 运行于PC平台的”交互式协同式三维图形软件开发系统与数据流可视化平台”如图1.1所示, 其中: ( 1) Intra3D 2.0是基于OpenGL的交互式三维图形软件开发工具, 可用于快速开发Window 9X/NT下的交互式三维图形应用软件。 ( 2) DVL 2.0是基于OpenGL的数据可视化工具库, 主要用于绘制科学计算数据和商业统计图形。结合Intra3D 2.0和DVL 2.0能够快速开发交互式数据可视化应用软件。 ( 3) CNC 2.0是用于协同工作的网络通讯开发系统, 其核心是支持”发布—订阅模式”和”数据流模式”的类库。结合Intra3D 2.0、 DVL 2.0和CNC 2.0, 能够快速开发支持协同工作的交互式三维图形与数据可视化应用软件。 ( 4) GIVE+ 是”分布式数据流可视化平台”。用户从GIVE+ 中选取模块, 以”搭积木”的方式将各个模块用数据流连接起来, 之后用户就能够直观地控制这些模块的运行。如果用户在GIVE+ 中找不到需要的模块, 能够使用Intra3D 2.0、 DVL 2.0和CNC 2.0来开发该模块, 把开发完成的模块添加到GIVE+的模块库中即可。 PC + Windows 9X/NT 交互式三维图形软件开发工具 Intra3D 2.0 用于协同工作的网络通讯开发系统 CNC 2.0 数据可视化工具库 DVL 2.0 国际图形标准 OpenGL 通用可视化平台 GIVE与GIVE + 图1.1 交互式协同式的三维图形软件开发系统与数据流可视化平台 3、 Intra3D 2.0 设计思想 图1.1的方案充分体现了”大规模复用”和”分而治之”的软件工程思想。如果按工作量划分比例, 那么Intra3D 2.0 约占40%, DVL 2.0约占10%, CNC 2.0约占25%, GIVE+ 约占25%。Intra3D 2.0 是上述方案中最重要的软件开发工具。 在设计Intra3D 2.0时, 分析过百余个OpenGL应用程序, 借鉴了Open Inventor与Optimeizer/Cosmo3D的设计优点。以下是Intra3D 2.0与Open Inventor的主要不同点: ( 1) 体系结构不同。Open Inventor是围绕Scene Graph开发的, 可称大而全, 但其很多功能在图1.1方案中不实用也不必须。Intra3D 2.0分四层设计, 每层少而精, 扩展灵活, 切合图1.1的方案。 ( 2) Intra3D 2.0提供C++类库与COM( Component Object Model) 库, 支持Visual C++、 Visual Basic、 Delphi编程。这种多语言编程是现代PC应用开发的一个特征。而Open Inventor是从SGI的IRIS Inventor发展而来的, 由于需求背景不同, Open Inventor不具备Intra3D 2.0这种特征。 ( 3) Intra3D 2.0是个免费软件, 所有源代码向用户开放。Intra3D 2.0的内核用Visual C++ 编写, 其C++类库与COM库各有60余个模块, 共有7万多行代码。由于Intra3D 2.0是分层设计的, 用户能够方便地修改内核以适应不同的需求。Open Inventor是商业软件, 不免费、 不公开源代码。 4 Intra3D 2.0的主要模块与功能 4.1、 基础对象与函数层 ( 1) 定义了用于对象引用计数的内存管理基类; ( 2) 矢量、 矩阵与四元组运算, 鼠标跟踪球算法; ( 3) 点阵字体与三维矢量字体输出, 常见于数据可视化图形的数据标注; ( 4) 图像输入输出以及纹理映射, 支持BMP、 GIF、 JPEG、 SGI、 TGA等图像格式; ( 5) 常见几何图元的绘制, 如锥、 柱、 球、 环等, 并支持Swept形体, 螺旋体的绘制; ( 6) 提供450余种材质, 在第四层中能够交互式编辑这些材质。 4.2、 图形对象层 图形对象能将数据转化为几何模型并能够绘制出来。Intra3D 2.0版提供了三类图形对象: ( 1) 常见几何对象, 如长方体、 锥体、 圆柱体、 球体、 圆环体、 Swept形体等; ( 2) 多边形模型对象, 用于绘制Autodesk公司.3ds模型和Wavefront公司的.obj模型; ( 3) 商业统计图形对象, 如柱形图、 带状图、 条形图、 折线图、 面积图、 饼图、 塔形图、 曲线图、 曲面图、 进程图、 股票图等。 图形对象的开发与应用问题密切相关, 用户能够使用继承方法扩充新的图形对象, 而不会影响到其它三层的构件。 4.3、 场景图与节点层 场景图是有向无环图主要节点有: ( 1) SceneNode是所有节点的基类。在SceneNode中定义了局部坐标系以及相应的图形变换, 这样便于第四层以同样的操作方式实现三维交互。 ( 2) 相机节点支持平行投影与透视投影, 支持多个相机切换。 ( 3) 光源节点有三种: 平行光源节点、 点光源节点和锥光源节点。 ( 4) 形体节点( ShapeNode) 用于引用图形对象, 有关图形对象的三维交互均由ShapeNode处理。 4.4、 绘制与交互层 Intra3D 2.0的交互分两类: 一类是对形体、 光源和相机的直接操作, 另一类是真实感属性的编辑。Intra3D的场景视窗构件封装了交互式绘制的所有细节, 如消息处理、 场景节点的遍历绘制、 多重采样消锯齿、 鼠标交互等。为了便于编辑真实感属性, Intra3D 2.0定制了一些常见对话: 矢量字体对话、 颜色对话、 材质库对话、 材质对话与光源对话。 5编译环境设置 Intra3D 2.0的C++ 类库与COM 库均用Visual C++ 6.0开发。 5.1、 制作C++ 类库 C++ 类库的工程文件Intra3D.dsp位于Intra3D\Source\Intra3D-DLL目录下。为了正确编译, 应将Visual C++ Options菜单的Directories 属性设置如下: ( 1) Include属性添加 \Intra3D\Source\Intra3D-DLL与 \Intra3D\Source\Intra3D-DLL\ Include; ( 2) Lib属性添加 \Intra3D\Source\Intra3D-DLL。 在制作Release版本时, 在工程文件中添加 Intra3D.def文件。在制作Debug版本时, 在工程文件中添加 Intra3D_d.def文件。最后应将编译生成的 .dll与 .lib文件复制到Intra3D\Lib目录下。 5.2、 制作COM 库 Intra3D.ocx的工程文件Intra3D.dsp位于Intra3D\Source\Intra3D-COM目录下。为了正确编译, 应将Visual C++ Options菜单的Directories 属性设置如下: ( 1) Include属性添加 \Intra3D\Source\Intra3D-COM; ( 2) Lib属性添加 \Intra3D\Source\Intra3D-COM。 在编译OpenGL.ocx 与OglWindow.ocx的工程文件时, 采用Visual C++的缺省设置即可。最后应将编译生成的 .ocx 与 .tlb文件复制到Intra3D\Lib目录下。 5.3、 使用C++类库编写3D应用程序 使用Intra3D 2.0 C++类库编写3D应用程序, 应将Visual C++ Options菜单的Directories 属性设置如下: ( 1) Include属性添加路径 \Intra3D\Source\Intra3D-DLL\Include; ( 2) Lib属性添加路径 \Intra3D\Lib。 Release版本的3D应用程序使用 Intra3D.dll 与Intra3D.lib。Debug版本的3D应用程序使用 Intra3D_d.dll 与Intra3D_d.lib。用户可参考Intra3D\Examples\VisualC++ 目录下的4个示例程序。 6 计算机硬件配置 ( 1) CPU主频不低于200MHz; ( 2) 内存不低于64M; ( 3) 显示卡支持800*600真彩色; ( 4) 安装Intra3D 2.0标准版软件需占用25M硬盘空间。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服