OpenSceneGraph快速入门指导对跨平台开源场景图形API的初步介绍[美]PaulMartz著王锐钱学雷译本书谨献给每一个场景图形开发技术的初学者。i目录目录译者序…………………………………………………………………..v前言…………………………………………………………………..vii致谢…………………………………………………………………..xi1场景图形与OpenSceneGraph概述……………………………11.1OpenSceneGraph的历史………………………………………..11.2OSG的安装……………………………………………………..31.2.1硬件需求………………………………………………41.2.2AppleMacOSX…………………………………….51.2.3FedoraLinux………………………………………….51.2.4MicrosoftWindows…………………………………...51.2.5检查OSG的安装……………………………………..61.3运行osgviewer………………………………………………….71.3.1获取帮助……………………………………………...81.3.2显示模式……………………………………………...91.3.3环境变量……………………………………………..101.3.4统计信息显示………………………………………..111.3.5记录动画……………………………………………..121.4编辑OSG程序………………………………………………...131.5场景图形初步………………………………………………….151.5.1场景图形特性………………………………………..17OpenSceneGraph快速入门指导ii1.5.2场景图形渲染方式…………………………………..191.6OpenSceneGraph概览………………………………………...201.6.1设计和体系………………………………………….211.6.2命名习惯……………………………………………..211.6.3组件…………………………………………………..222建立一个场景图形……………………………………………...362.1内存管理………………………………………………………...362.1.1Referenced类………………………………………....392.1.2ref_ptr模板类………………………………………392.1.3内存管理示例…………………………………………402.2叶节点(Geode)和几何信息…………………………………432.2.1Geometry类概述……………………………………...482.3组节点(Group)……………………………………………….522.3.1子接口…………………………………………………532.3.2父接口…………………………………………………552.3.3变换节点(Tranform)……………………………….562.3.4细节层次节点(LOD)………………………………602.3.5开关节点(Switch)………………………………….632.4渲染状态(RenderingState)…………………………………642.4.1渲染属性(Attribute)和渲染模式(Mode)……662.4.2状态继承……………………………………………68iii目录2.4.3渲染状态设置示例…………………………….…......702.4.4纹理映射………………………………………..…….762.4.5光照…………………………………………..……802.5文件I/O………………………………………………………872.5.1接口……………………………………………882.5.2插件的搜索和注册……………………………902.6NodeKit与osgText…………………………………………912.6.1osgText组件………………………………………922.6.2使用osgText………………………………………922.6.3文字示例代码………………………………….…972.6.4.osg文件格式………………………………………983在用户程序中使用OpenSceneGraph……………………1043.1渲染……………………………………………………………1043.1.1Viewer类………………………………………..…1063.1.2SimpleViewer和CompositeViewer…………….…1093.2动态更改……………………………………………………1103.2.1数据变度………………………………………….…1113.2.2回调…………………………………………….……1123.2.3NodeVisitor类……………………………………1183.2.4用户选择………………………………………….…121OpenSceneGraph快速入门指导iv附录:从这里开始……………………………………………130词汇表……………………………………………………………132参考书目………………………………………………………….137v译者序译者序OpenSceneGraph图形系统是一个基于工业标准OpenGL的软件接口,它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。本书是OSG开发小组推荐的OpenSceneGraphx.x版入门级指南。本书首先介绍了场景图形的概念,OSG的历史和开源组织、它的能力、如何获取和正确安装OSG,以及一些简单示例程序的运行;然后深入探讨了一些OSG的内部管理机制和实用技术,包括内存管理、场景图形结构、OSG的状态属性和模式控制、较复杂的场景图形系统、图形节点的概念和特性、I/O接口、以及文字添加等功能的具体介绍;昀后重点探讨了如何将OSG集成到用户程序中去的各种关键技术,包括场景的渲染、视角的改变、图像节点的选取以及在系统运行时动态地修改场景图形数据的技术。本书要求读者有一定的C++语言基础和数学知识,适合所有对OSG编程感兴趣的读者阅读。自Sutherland在1965年提出“UltimateDisplay”并设计实现了世界上第一个交互式图形系统后,计算机图形学及人-机交互技术取得了难以想象的进步。在过去20年当中,随着计算机图形加速技术的快速发展,由计算机实时传输、处理、可视化亿级比特数据、并为终端用户提供三维交互式场景已经成为现实。而以虚拟现实为代表的显示技术和图形信息管理技术也取得了很大进步。目前,全球有数以千计的公司的业务涉及或正在使用三维交互式图形系统,而这些软件在显示、模拟、仿真、计算机辅助设计、科学数据可视化及分析领域的应用随处可见。这些应用已成为科研开发、工业生产中的重要工具。从系统开发人员的角度看,相比工业标准OpenGL或其它的图形库,OpenSceneGraph的优点显而易见。除了开源和平台无关性以外,它封装并提供了数量众多的提升程序运行时性能的算法、针对包括分页数据库在内的几乎所有主流数据格式的直接数据接口、以及对脚本语言系统Python和Tcl的支持,特别的,支持脚本语言系统的意义不仅限于用户可以使用除C++语言以外的工具进行OpenSceneGraph快速入门指导vi图形系统的开发,事实上,对弱类型计算机语言的支持将突破现有交互式图形系统在人-机交互性能方面的昀终限制。为了将这本书尽快带给国内读者,尤其是当OSG开发小组在SIGGRAPH2007-OSGBOF上宣布将本书的翻译工作列为OSG开发项目之一后,本书译者带着紧迫感,在原书作者的帮助下,经过一个多月的努力,终于完成了本书的翻译工作。在此要特别感谢RobertOsfield、DonBruns,以及OSG开发小组主要成员之一、本书作者PaulMartz,没有他们和其它小组成员的共同努力,OSG不可能成为当今应用昀为广泛的图形系统开发库,当然,也就不可能有这本小书的问世。译者简介王锐:清华大学制造工程研究所研究员。2006年毕业于清华大学精密仪器与机械学系。现主要从事数字控制技术、虚拟现实与虚拟产品等领域的开发与研究工作。本人在虚拟设计论坛,主要联系方式:电子邮箱wangray84@gmail.com,MSN为wangray84@hotmail.com。钱学雷:清华大学制造工程研究所博士后。主要从事数字控制技术、CAD/CAM/CAPP集成技术、虚拟现实与虚拟产品开发、数控系统计算机仿真等领域的科研工作。vii前言前言本书是一本对于OpenSceneGraph(OSG)的简明介绍。OSG是一个跨平台的开源场景图形程序开发接口(API)。本书特别地针对OSG1.3的版本。OSG在3D应用程序的层级中扮演着重要的角色。它作为中间件(middleware)为应用软件提供了各种高级渲染特性,IO,以及空间结构组织函数;而更低层次的OpenGL硬件抽象层(HAL)实现了底层硬件显示的驱动。一直以来,OSG都是以源代码作为可阅读的文档资料。OSG的发布版本中包含了一些示例程序,用于介绍各种不同渲染效果的实现,以及OSG与终端用户软件的集成方法。有相当部分的开发者可以通过这些示例程序,以及使用调试工具深入了解OSG的核心,成长为熟练的OSGAPI程序员。尽管根据以往的经验,源代码足可起到编程文档的作用,但是它仍然不能替代正式格式的编程文档。图形和表格是编程手册中常见的易于理解的教学工具,但是它们在源代码中几乎无法体现。正因为OSG的迅速发展和愈发复杂的体系,对于它的新用户来说,在缺乏参考文档的情况下学习OSG所需的时间也就越长,这是我们所不愿看到的。事实上,在这本书面世以前,由于编程文档的匮乏,一部分开发者已经对OSG的成熟性和稳定性产生了疑问,怀疑它是否能胜任专业级应用程序的开发工作。2006年中期,DonBurns和RobertOsfield认识到了编写OSG书籍的重要性。Don的客户之一,计算机图形系统开发公司(CGSD),要求编写一定量的OSG图书和文档。Don将这一文档开发工作转交给PaulMartz,而Robert则建议第一本OSG的书籍应当是免费且通俗易懂的。因此,《OpenSceneGraph快速入门指导》诞生了。这本书是一个简短的编程指南,它介绍了基本和核心的OSGAPI函数。它同时也是一系列计划出版的OSG书籍的第一部,OSG的文档将随着这个系列的发行而逐渐完善。《OpenSceneGraph快速入门指导》的编写目的如下。z快速且高效地向新的OSG开发者介绍OSG的基础知识。z使开发者对于OSG的发行和源代码结构有更加深入的认识。z介绍常用的OSGAPI函数及其用途。OpenSceneGraph快速入门指导viiiz指导读者学习OSG的源代码及相关文档。基于开放源代码的理念,《OSG快速入门指导》一书的PDF版本将不必支付任何费用即可获得。但是,读者也可以通过购买全彩薄页印刷版本的方式,向OSG的开发团体进行捐助。用户可以访问Lulu.com网站并搜索OpenSceneGraph,通过网络订购的方式来获取本书。本书装订版本的收入将用于文档的修订工作,以保证本书版本是昀新的。无论用户是免费下载,还是购买了本书的装订版本,用户的反馈意见都将对本书的修订工作产生极大的帮助。请您将相关的修改意见发布在OSG用户邮件列表中。关于用户邮件列表的相关信息,请参见“附录:从这里开始”。关于本书的昀新修订版本,请登陆《OpenSceneGraph快速入门指导》网站:上面的网址包括了本书昀新版本的获取方式,书中示例程序的源代码,以及其他一些相关的出版信息。适宜读者群本书的内容不多,而缩短其篇幅并不是一件容易的事。本书将主要介绍实用