资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
欢迎开始学习OpenSceneGraph(OSG)的旅程。通过本章,读者将了解到OSG的历史、发展和组成模块,并将学习如何获取、安装及编译OSG。本章将对本书中使用的一些规范加以说明,还会讲解如何使用OSG的常用工具以及如何设置开发环境。1.1 OpenSceneGraph简介1.1.1 什么是OpenSceneGraphOSG是一个开源的场景图形管理开发库,主要为图形图像应用程序的开发提供场景管理和图形渲染优化功能。它使用可移植的ANSI C+编写,并使用已成为工业标准的OpenGL底层渲染API。因此,OSG具备跨平台性,可以运行在Windows、Mac OS X和大多数类型的UNIX和Linux操作系统上。在OSG中,大部分的操作可以独立于本地GUI,但是OSG也包含了针对某些视窗系统特有功能的支持代码,这主要是源于OpenGL本身的特性。OSG是公开源代码的,它的用户许可方式为修改过的GNU宽通用公共许可证(GNU Lesser General Public License,LGPL)。1.1.2 OpenSceneGraph的历史和发展早在1997年,Don Burns便作为软件设计顾问受雇于Silicon Graphics(SGI),他在业余时间还喜欢滑翔运动。正因为对计算机图形和滑翔机同样的热衷及对尖端渲染设备的了解,他使用Performer场景图形(SGI专有)系统设计了一套基于SGI Onyx的滑翔仿真软件。由于受到其他滑翔爱好者的鼓励,Don开始尝试使用Linux上的Mesa3D和3dfx 的Voodoo设备,以开发基于更多硬件平台的仿真软件。当这套软件开始支持OpenGL时,场景图形的概念还未能应用于Linux。为了填补这一空缺,Don开始编写一套简单的、类似于Performer的场景图形系统,名为SG。SG的开发强调朴素且易用,它满足了当时人们对于场景图形系统的需求,也使Don的滑翔仿真软件能够运行于低成本的Linux系统。到了1998年,Don在滑翔爱好者的邮件组中遇到了Robert Osfield。那时Robert在Midland Valley Exploration工作,那是一个来自苏格兰格拉斯哥的油气公司。Robert同样对计算机图形学和可视化技术有着浓厚的兴趣。两人开始合作,对仿真软件进行改善。Robert 倡导开源,并提议将SG作为独立的开源场景图形项目继续开发,并由自己担任项目主导。项目的名称改为OpenSceneGraph,当时共有9人加入了OSG的用户邮件列表。2000年底,Brede Johansen为OpenSceneGraph作出了第一份贡献,即添加了OSG的OpenFlight模块。当时他在挪威孔斯贝格的Kongsberg Maritime船舶仿真公司工作,该公司后来设计了基于OSG的SeaView R5视觉系统。同样在2000年,Robert离开了原来的工作单位,作为OpenSceneGraph的专业服务商开始全职进行OSG的开发工作。在这段时间,他设计并实现了今天的OSG所使用的许多核心功能,并且是在完全没有客户和薪酬的情况下完成的。Don到了Keyhole数字地图公司(现在是Google的Google Earth部门),于2001年辞职,他也组建了自己的公司Andes ComputerEngineering,位于加利福尼亚州的圣何塞,公司成立后继续进行OSG的开发工作。第一届OpenSceneGraph“同好”会在SIGGRAPH 2001举行,只有12个人参加,听众包括了来自Magic Earth的代表,其目的是寻求一个开源的场景图形库来支持油气相关软件的开发。他们与Don和Robert讨论了开发的事宜,并成为了OSG的第一个收费用户1。随着这几年开源的不断发展,OSG的模块和第三方附加库不断完善,OSG已具备对高性能渲染、海量地形数据库、地理信息及多通道等的支持。1.1.3 OSG中国于2008年初成立的OsgChinaOSG中国官方网(http:/www.OsgChina.org),作为国内目前最大的专注于OpenSceneGraph(OSG)发展和研究的网站和论坛,以及OSG英文官方站点(http:/www.openscenegraph.org)的唯一中文镜像站,一直致力于为国内OSG爱好者和开发者们提供一个交流和相互学习的无障碍平台,并且不断地收集、整理、归纳、创新,形成了愈加完备的OSG学习者资源集散中心,有数以千计的注册会员作为坚实后盾。OsgChina日常工作人员由国内资深开发者FreeSouth、FlySky、array和Hesicong等组成,他们为OSG在中国发展提供强大的技术支持。同时,OsgChina将举办定期或不定期的OSG相关会议和研讨活动,邀请国内外的开发者和企业代表参加,与会者可以在会上展出自己的作品,宣传自己的品牌和理念。OsgChina还向与会者提供工作和进修机会,并开展各种专题讲座和学习会活动。如果读者在学习的过程中有很多疑问,欢迎注册OSG中国官方讨论社区(http:/bbs.OsgChina.org)发帖提问,共同提高。1.1.4 OSG组成模块通过前面的介绍已经了解,OpenSceneGraph及其扩展位于系统的API一级,即系统的底层绘图硬件和相应的软件驱动程序之上封装了OpenGL,并对其余的底层图形显示方式予以支持,利用OpenSceneGraph可以轻松地开发其上层的应用程序。OSG层次结构图如图1-1所示。在进一步学习OSG之前,有必要学习OSG的组成模块,从而有利于从总体上把握学习OSG及应用OSG开发的方向。OSG主要包括4个库,下面分别进行介绍。(1)OSG核心库(Core Library)核心库是OSG的核心,也是其存在且不断得到发展的根本原因。它的主要功能就是实现最核心的场景数据库的组织和管理、对场景图形的操作以及为外部数据库的导入提供接口等。它主要包括以下4个库。?osg库:基本数据类,负责提供基本场景图类,构建场景图形节点,如节点类、状态类、绘制类、向量和矩阵数学计算以及一般的数据类。同时,它包含一些程序所需要的特定功能类,如命令行解析和错误调试信息等。?osgUtil库:工具类库,提供通用的公用类,用于操作场景图形及内容,如更新、裁减、遍历、数据统计及场景图的一些优化。?osgDB库:数据的读写库,负责提供场景中数据的读写工作,提供了一个文件工具类。注意,OSG中场景图管理是通过遍历场景图层次结构来完成大部分的数据处理工作的。?osgViewer库:是在OSG 2.0后逐步发展稳定的一个视窗管理库,可以集中各种窗体系统,提供OSG与各种GUI的结合。因此,它是跨平台的3D管理窗口库。(2)OSG工具库(NodeKit)OSG工具库主要是对OSG核心库中osg库的扩充,是对OSG核心库的一个补充,它实现了一些特定的功能。它主要包括以下6个库。?osgFX库:特殊效果节点工具,用于渲染特效节点,包括异性光照特效(osgFX:Anisotropic Lighting)、凹凸贴图特效(osgFX:BumpMapping)、卡通渲染特效(osgFX:Cartoon)、刻线特效(osgFX:Scribe)和立方图镜面高光特效(osgFX:SpecularHighlights)等。?osgParticle库:粒子系统的节点工具,用于模拟各种天气或者自然现象效果,如雨效、雪效和爆炸模拟等。?osgSim库:虚拟仿真效果的节点工具,用于特殊渲染,如地形高程图、光点节点和DOF变换节点等。?osgTerrain库:生成地形数据的节点工具,用于渲染高程数据,如TIF、IMAGE和DEM等各种高程数据格式。注意,OSG通过一个开源库GDAL读取这些高程数据。?osgText库:文字节点工具,用于向场景中添加文字信息,它完全支持TrueType字体。?osgShadow库:阴影节点工具,用于向场景中添加实时阴影,提高场景渲染的真实性。(3)OSG插件库OSG插件库是OSG的一个非常重要的特点。通过各种第三方库的支持,OSG能够直接或间接地导入3D模型或图片等场景数据,可以省去大量绘制图形的工作,从而极大地方便了开发者。具体支持的各种数据格式可参见第5章。(4)OSG内省库(osgIntrospection) OSG内省库提供了一个与语言无关的运行程序接口,确保了OSG可以在更多的环境下运行。osgIntrospection库允许软件系统使用反射式和自省式的编程范例与OSG交互。应用程序和软件可以使用osgIntrospection库和方法迭代OSG的类型、枚举量和方法,并且不需要了解OSG 编译和链接时的过程,即可调用这些方法。Smalltalk和Objective-C等语言包括了内建的反射式和自省式支持,但是C+的开发者通常无法运用这些特性,因为C+并未保留必要的元数(metadata)。为了弥补C+的这一不足,OSG提供了一系列自动生成的、从OSG源代码创建的封装库。用户程序不需要与OSG的封装直接交互,它们将由osgIntrospection整体进行管理。由于osgIntrospection及其封装的结果,许多的语言,如Java、TCL、Lua和Python,都可以与OSG进行交互。综上所述,OSG的组成模块如图1-2所示。 图1-2OSG组成模块图 1.2 开发的预备知识本书为准备学习,并使用OSG进行程序开发的开发者编写。本书主要介绍实用OSG函数及其应用,在阅读此书前,读者应该有一定的C+开发经验。OSG是一个C+的API库,同时也是对OpenGL的底层封装,所以读者还需先了解OpenGL的渲染流程。OSG对于标准模板库(STL)的运用十分广泛,因此,读者在阅读本书前应当对STL容器,特别是列表(list)、向量组(vector)和映射(map)有较深的理解。如果读者对于设计模式(design patterns)也有一定的认识和理解,将对OSG的学习大有裨益,不过并非是必要的。在学习使用OSG编程之前,读者有必要首先熟悉3D图形学。对于本书而言,读者需要熟悉OpenGL编程接口,而OpenGL是标准的跨平台底层3D图形API函数库。对于3D图形学,希望读者能够理解对不同类型的坐标空间熟练应用笛卡儿三维坐标系来表示三维几何数据。同时,读者需要了解一些基本的图形术语概念,不过并不需要对底层图形硬件的实现有很深入的认识和理解。读者最好还要具备一定的线性代数知识,熟悉采用向量表示三维坐标的方法以及渲染过程中采用矩阵变换进行图形系统的相关操作,因此,还有必要了解矩阵运算的有关知识。每个人的编程风格都是不一样的,下面简单介绍一下本书中的一些编程规范。1命名规范本书使用标准的C+命名规则,编写一个子模块或派生类时,遵循其基类或整体模块的命名风格,保持命名风格在整个模块中的统一性。标识符采用英文单词或其组合,直观且可以拼读,望文知意。2编程风格OSG中提供的智能指针可以方便管理内存,防止内存的泄露。但建议初学时不要写成指针的方式,以避免不必要的错误或异常发生。例如:osg:Geode* geode = new osg:Geode();/指针的写法osg:ref_ptr geode = new osg:Geode();/建议读者的写法当然,如果读者是熟练的C+开发人员,可以根据自己的爱好选择。注意,在一个大型系统的开发过程中,使用指针或不使用应当统一,以避免带来不必要的麻烦。笔者还喜欢对头文件进行分类处理,以方便对头文件进行管理及操作。例如:#include osg/
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号