IX 前言 和映射(map),有较深的了解。如果读者对于设计模式(design patterns)也有 一定的认识,这对于OSG的学习大有裨益,不过并不是必要的。 读者应当熟练掌握和运用数据结构的相关知识,例如树结构和链表。 在自己的程序中使用OSG之前,读者首先要对3D图形学有一定的了解。 对于本书而言,读者需要对标准的跨平台底层3D图形库OpenGL较为熟悉。读 者需要理解不同坐标空间的概念,并熟练应用笛卡尔三维坐标系来指定几何数 据。读者还需要了解纹理贴图的本质,即向几何体指定图形,不过并不需要对底 层图形硬件的实现有很深入的认识。 读者最好还具备一定的线性代数知识。了解用向量表达3D位置的方法,以 及渲染中图形系统按矩阵变换向量的过程。读者需要了解矩阵连乘来表现几何变 换的有关知识。 阅读建议 如果你对上述的方方面面有某些疑惑和不理解的话,阅读下面列出的书籍应 当对你的学习大有帮助。 ·《OpenGL Programming Guide》,第五版,由OpenGL ARB,Dave Shreiner,Mason Woo,Jackie Neider和Tom Davis合著(Addison-Wesley) [ARB051 <Geometric Tools for Computer Graphics),Philip Schneider,David H Eberly著(Morgan Kaufmann)。 ●《Real-Time Rendering》,第二版,Tomas Akenine-Moller,Eric Haines 著(AK Peters), ●《Computer Graphics》,Principles and Practice出版,第二版,James D Foley,Andries van Dam,Steven K.Feiner John F.Hughes (Addison-Wesley)。 《TheC+Programming Language》,第三版,Bjarne Stroustrup著 (Addison-Wesley)
ix 前言 和映射(map),有较深的了解。如果读者对于设计模式(design patterns)也有 一定的认识,这对于 OSG 的学习大有裨益,不过并不是必要的。 读者应当熟练掌握和运用数据结构的相关知识,例如树结构和链表。 在自己的程序中使用 OSG 之前,读者首先要对 3D 图形学有一定的了解。 对于本书而言,读者需要对标准的跨平台底层 3D 图形库 OpenGL 较为熟悉。读 者需要理解不同坐标空间的概念,并熟练应用笛卡尔三维坐标系来指定几何数 据。读者还需要了解纹理贴图的本质,即向几何体指定图形,不过并不需要对底 层图形硬件的实现有很深入的认识。 读者最好还具备一定的线性代数知识。了解用向量表达 3D 位置的方法,以 及渲染中图形系统按矩阵变换向量的过程。读者需要了解矩阵连乘来表现几何变 换的有关知识。 阅读建议 如果你对上述的方方面面有某些疑惑和不理解的话,阅读下面列出的书籍应 当对你的学习大有帮助。 z 《OpenGL® Programming Guide》,第五版,由 OpenGL ARB,Dave Shreiner,Mason Woo,Jackie Neider 和 Tom Davis 合著(Addison-Wesley) [ARB05]。 z 《Geometric Tools for Computer Graphics》,Philip Schneider,David H. Eberly 著(Morgan Kaufmann)。 z 《Real-Time Rendering》,第二版,Tomas Akenine-Moller,Eric Haines 著(AK Peters)。 z 《Computer Graphics》,Principles and Practice 出版,第二版,James D. Foley,Andries van Dam,Steven K. Feiner 及 John F. Hughes 著 (Addison-Wesley)。 z 《The C++ Programming Language》,第三版,Bjarne Stroustrup 著 (Addison-Wesley)
OpenSceneGraph快速入门指导 X 本书的组织 《OpenSceneGraph快速入门指导》由三个主要章节和附录组成。第一章“场 景图形与OpenSceneGraph概述”,将简要地介绍OSG组织的历史,获取和安装 OSG的方法,以及如何使用OSG发行版本中的示例和工具程序。本章的内容还 包括对于场景图形概念的介绍,以及OSG及其开发团队的介绍。 在第二章“建立一个场景图形”中,你将学习如何使用OSG的数据结构来 保存和渲染几何体。本章还将介绍一些核心的OSG板块,例如引用指针,场景 图形节点,几何体类,渲染状态(纹理贴图及光照)等。本章还包括了对osgText 场景图形工具,向场景快速添加文字的方法,以及通过文件/O保存场景图形数 据和图像的方法的介绍。通过这一章的学习,你将熟练掌握使用OSG建立场景 图形并显示各种几何体的技术。 在第三章“在用户程序中使用OpenSceneGraph”中,你将学习渲染,视口 的放置和确立,以及动态修改场景图形和动画化的方法。 最后,在附录“从这里开始”中,你将了解获取更多关于OSG的信息的方 法。欢迎你加入OSG的开发团队。 关于作者 Paul Martz是Skew Matrix Software LLC的现任主席。该集团主要承担软件 定制开发,文档化,以及开发培训的服务。Paul自从1987年以来就一直参与3D 图形软件的开发工作,并编写了OpenGL Distilled一书Martz06)]。他同时还是 打击乐和音乐教育的爱好者,并喜爱一种扑克牌游戏
OpenSceneGraph 快速入门指导 x 本书的组织 《OpenSceneGraph 快速入门指导》由三个主要章节和附录组成。第一章“场 景图形与 OpenSceneGraph 概述”,将简要地介绍 OSG 组织的历史,获取和安装 OSG 的方法,以及如何使用 OSG 发行版本中的示例和工具程序。本章的内容还 包括对于场景图形概念的介绍,以及 OSG 及其开发团队的介绍。 在第二章“建立一个场景图形”中,你将学习如何使用 OSG 的数据结构来 保存和渲染几何体。本章还将介绍一些核心的 OSG 板块,例如引用指针,场景 图形节点,几何体类,渲染状态(纹理贴图及光照)等。本章还包括了对 osgText 场景图形工具,向场景快速添加文字的方法,以及通过文件 I/O 保存场景图形数 据和图像的方法的介绍。通过这一章的学习,你将熟练掌握使用 OSG 建立场景 图形并显示各种几何体的技术。 在第三章“在用户程序中使用 OpenSceneGraph”中,你将学习渲染,视口 的放置和确立,以及动态修改场景图形和动画化的方法。 最后,在附录“从这里开始”中,你将了解获取更多关于 OSG 的信息的方 法。欢迎你加入 OSG 的开发团队。 关于作者 Paul Martz 是 Skew Matrix Software LLC 的现任主席。该集团主要承担软件 定制开发,文档化,以及开发培训的服务。Paul 自从 1987 年以来就一直参与 3D 图形软件的开发工作,并编写了 OpenGL® Distilled 一书[Martz06]。他同时还是 打击乐和音乐教育的爱好者,并喜爱一种扑克牌游戏
xi 致谢 致谢 如果没有OpenSceneGraph,就不会有本书的问世。因此我们将首先感谢Don Burns和Robert Osfield,OSG的创始人和开发的领导者。同时还要感谢所有的 OSG开发团队,超过1600名优秀的开发者,正在为这个开源软件的标准化时刻 贡献着自己的力量。 感谢Robert Osfield以及他的OpenSceneGraph专业支持团队。我们的第一本 OpenSceneGraph书籍能够成为一本免费的快速指南,正是出于他的建议。同时 感谢CGSD的Roy Latham以及安第斯(Andes)计算机公司的Don Burns,他们 为本书的第一版提供了资金上的援助。 再次感谢Robert Osfield,以及Leandro Motta Barros,他们共同编写了OSG 的部分开发文档。这无疑成为了本书编写的基石。感谢Ben Discoe和虚拟地形 开发计划(Virtual Terrain Project)。本书的源代码中使用了他们的数据库中提供 的植物图形。 OSG开发团队中的许多开发者为本书提供了技术支持,以及其它的一些帮 助。感谢Sohaib Athar,Ellery Chan,Edgar Ellis,Andreas Goebel,.Chris“Xenon” Hanson,Farshid Lashkari,Gordon Tomlinson,John Wojnaroski。他们都为本书的出版作出了不同的贡献。 最后,我要感谢Deedre Mart忆,她对本书进行了专业的审校工作,并帮助我 改正了很多不好的个人写作习惯
xi 致谢 致谢 如果没有 OpenSceneGraph,就不会有本书的问世。因此我们将首先感谢 Don Burns 和 Robert Osfield,OSG 的创始人和开发的领导者。同时还要感谢所有的 OSG 开发团队,超过 1600 名优秀的开发者,正在为这个开源软件的标准化时刻 贡献着自己的力量。 感谢 Robert Osfield 以及他的 OpenSceneGraph 专业支持团队。我们的第一本 OpenSceneGraph 书籍能够成为一本免费的快速指南,正是出于他的建议。同时 感谢 CGSD 的 Roy Latham 以及安第斯(Andes)计算机公司的 Don Burns,他们 为本书的第一版提供了资金上的援助。 再次感谢 Robert Osfield,以及 Leandro Motta Barros,他们共同编写了 OSG 的部分开发文档。这无疑成为了本书编写的基石。感谢 Ben Discoe 和虚拟地形 开发计划(Virtual Terrain Project)。本书的源代码中使用了他们的数据库中提供 的植物图形。 OSG 开发团队中的许多开发者为本书提供了技术支持,以及其它的一些帮 助。感谢 Sohaib Athar,Ellery Chan,Edgar Ellis,Andreas Goebel,Chris “Xenon” Hanson,Farshid Lashkari,Gordon Tomlinson,以及 John Wojnaroski。他们都为本书的出版作出了不同的贡献。 最后,我要感谢 Deedre Martz,她对本书进行了专业的审校工作,并帮助我 改正了很多不好的个人写作习惯
OpenSceneGraph快速入门指导 1、场景图形与 OpenSceneGraph概述 最初的这一章将为你介绍场景图形的概念。你将了解到OSG的历史和组织, 了解它的能力,并学习如何获取和安装OSG,以及一些简单例子的运行。通过 对这一章的学习,你将逐渐熟悉场景图形和OSG。本章将不会介绍OSG程序的 编程细节,你可以在第二章和第三章的学习中获得更多的知识。本章仅仅是一个 概述而己。 l.1 OpenSceneGraph的历史 早在1997年,Don Burns便作为软件设计顾问受雇于Silicon Graphics(SGI), 他在业余时间还喜好于滑翔运动。正因为对计算机图形和滑翔机同样的热衷,以 及对尖端渲染设备的了解,他使用Performer场景图形(SGI专有)系统,设计 了一套基于SGI Onyx的滑翔仿真软件。 由于受到其他滑翔爱好者的鼓励,Don开始尝试使用Linux上的Mesa3D和 3d的Voodoo设备,以开发基于更多硬件平台的仿真软件。当这套软件开始支 持OpenGL的时候,场景图形的概念还未能应用于Linux。为了填补这一空缺, Don开始编写一套简单的类似于Performer的场景图形系统,名为“SG”。SG的 开发强调朴素且易用,它满足了当时人们对于场景图形系统的需求,也使得Do 的滑翔仿真软件能够运行于低成本的Liuⅸ系统。 到了1998年,Don在滑翔爱好者的邮件组中遇到了Robert Osfield。.那时 Robert在Midland Valley Exploration工作,那是一个来自苏格兰格拉斯哥的油气 公司。Robert同样对计算机图形学和可视化技术有着浓厚的兴趣。两人开始合作 对仿真软件进行改善。Robert倡导开源,并提议将SG作为独立的开源场景图形
OpenSceneGraph 快速入门指导 1 1、场景图形与 OpenSceneGraph 概述 最初的这一章将为你介绍场景图形的概念。你将了解到 OSG 的历史和组织, 了解它的能力,并学习如何获取和安装 OSG,以及一些简单例子的运行。通过 对这一章的学习,你将逐渐熟悉场景图形和 OSG。本章将不会介绍 OSG 程序的 编程细节,你可以在第二章和第三章的学习中获得更多的知识。本章仅仅是一个 概述而已。 1.1 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概述 项目继续开发,并由自己担任项目主导。项目的名称改为OpenSceneGraph,当 时共有九人加入了OSG的用户邮件列表。 20O0年底,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“同好”会在SIGGRAPH2001举行,只有12人参加。听众中 包括了来自Magic Earth的代表,其目的是寻求一个开源的场景图形库来支持油 气相关软件的开发。他们和Don和Robert讨论了开发的事宜,并成为了OSG的 第一个收费用户。 每一年,OSG同好会的参与者都会增加,OSG用户邮件列表的成员也以明 显的速度飞快增长(如图1-1)。在本书付印之时,OSG已经拥有超过1600名用 户了。 1500 1000 500 1998 2000 2002 2004 2006 图1-10SG用户邮件组的增加 0SG用户邮件组的增加速度令人瞩目。 OSG的模块和附加库的开发也在不断加速。2003年,OSG的通用库Producer
2 场景图形与 OpenSceneGraph 概述 项目继续开发,并由自己担任项目主导。项目的名称改为 OpenSceneGraph,当 时共有九人加入了 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 的 第一个收费用户。 每一年,OSG 同好会的参与者都会增加,OSG 用户邮件列表的成员也以明 显的速度飞快增长(如图 1-1)。在本书付印之时,OSG 已经拥有超过 1600 名用 户了。 图 1-1 OSG 用户邮件组的增加 OSG 用户邮件组的增加速度令人瞩目。 OSG 的模块和附加库的开发也在不断加速。2003 年,OSG 的通用库 Producer