OpenSceneGraph
快速入门指导
对跨平台开源
场景图形 API 的
初步介绍
[美] Paul Martz 著
王 锐 钱学雷 译
本书谨献给
每一个场景图形开发技术的初学者。
i 目录
目录
译者序………………………………………………………………….. v
前言 ………………………………………………………………….. vii
致谢 ………………………………………………………………….. xi
1 场景图形与 OpenSceneGraph 概述 …………………………… 1
1.1 OpenSceneGraph 的历史 ……………………………………….. 1
1.2 OSG 的安装 …………………………………………………….. 3
1.2.1 硬件需求 ……………………………………………… 4
1.2.2 Apple Mac OS X ……………………………………. 5
1.2.3 Fedora Linux …………………………………………. 5
1.2.4 Microsoft Windows …………………………………... 5
1.2.5 检查 OSG 的安装 …………………………………….. 6
1.3 运行 osgviewer …………………………………………………. 7
1.3.1 获取帮助 ……………………………………………... 8
1.3.2 显示模式 ……………………………………………... 9
1.3.3 环境变量 …………………………………………….. 10
1.3.4 统计信息显示 ……………………………………….. 11
1.3.5 记录动画 …………………………………………….. 12
1.4 编辑 OSG 程序 ………………………………………………... 13
1.5 场景图形初步 …………………………………………………. 15
1.5.1 场景图形特性 ……………………………………….. 17
OpenSceneGraph 快速入门指导 ii
1.5.2 场景图形渲染方式 ………………………………….. 19
1.6 OpenSceneGraph 概览 ………………………………………... 20
1.6.1 设计和体系 …………………………………………. 21
1.6.2 命名习惯 …………………………………………….. 21
1.6.3 组件 ………………………………………………….. 22
2 建立一个场景图形 ……………………………………………... 36
2.1 内存管理 ………………………………………………………... 36
2.1.1 Referenced 类 ……………………………………….... 39
2.1.2 ref_ptr<>模板类 ……………………………………… 39
2.1.3 内存管理示例 ………………………………………… 40
2.2 叶节点(Geode)和几何信息 ………………………………… 43
2.2.1 Geometry 类概述 ……………………………………... 48
2.3 组节点(Group) ………………………………………………. 52
2.3.1 子接口 ………………………………………………… 53
2.3.2 父接口 ………………………………………………… 55
2.3.3 变换节点(Tranform) ………………………………. 56
2.3.4 细节层次节点(LOD) ……………………………… 60
2.3.5 开关节点(Switch) …………………………………. 63
2.4 渲染状态(Rendering State) ………………………………… 64
2.4.1 渲染属性(Attribute)和渲染模式(Mode) …… 66
2.4.2 状态继承 …………………………………………… 68
iii 目录
2.4.3 渲染状态设置示例 …………………………….…...... 70
2.4.4 纹理映射 ………………………………………..……. 76
2.4.5 光照 …………………………………………..…… 80
2.5 文件 I/O ……………………………………………………… 87
2.5.1 接 口 …………………………………………… 88
2.5.2 插 件 的 搜 索 和 注 册 …………………………… 90
2.6 NodeKit 与 osgText ………………………………………… 91
2.6.1 osgText 组件 ……………………………………… 92
2.6.2 使用 osgText ……………………………………… 92
2.6.3 文字示例代码 ………………………………….… 97
2.6.4 .osg 文件格式 ……………………………………… 98
3 在用户程序中使用 OpenSceneGraph …………………… 104
3.1 渲染 …………………………………………………………… 104
3.1.1 Viewer 类 ………………………………………..… 106
3.1.2 SimpleViewer 和 CompositeViewer …………….… 109
3.2 动态更改 …………………………………………………… 110
3.2.1 数据变度 ………………………………………….… 111
3.2.2 回调 …………………………………………….…… 112
3.2.3 NodeVisitor 类 …………………………………… 118
3.2.4 用户选择 ………………………………………….… 121
OpenSceneGraph 快速入门指导 iv
附录:从这里开始 …………………………………………… 130
词汇表 …………………………………………………………… 132
参考书目 …………………………………………………………. 137
v 译者序
译者序
OpenSceneGraph 图形系统是一个基于工业标准 OpenGL 的软件接口,它让
程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。本书是
OSG 开发小组推荐的 OpenSceneGraphx.x 版入门级指南。
本书首先介绍了场景图形的概念,OSG 的历史和开源组织、它的能力、如
何获取和正确安装 OSG,以及一些简单示例程序的运行;然后深入探讨了一些
OSG 的内部管理机制和实用技术,包括内存管理、场景图形结构、OSG 的状态
属性和模式控制、较复杂的场景图形系统、图形节点的概念和特性、I/O 接口、
以及文字添加等功能的具体介绍;最后重点探讨了如何将 OSG 集成到用户程序
中去的各种关键技术,包括场景的渲染、视角的改变、图像节点的选取以及在系
统运行时动态地修改场景图形数据的技术。
本书要求读者有一定的 C++语言基础和数学知识,适合所有对 OSG 编程感
兴趣的读者阅读。
自 Sutherland 在 1965 年提出“Ultimate Display”并设计实现了世界上第一
个交互式图形系统后,计算机图形学及人-机交互技术取得了难以想象的进步。
在过去 20 年当中,随着计算机图形加速技术的快速发展,由计算机实时传输、
处理、可视化亿级比特数据、并为终端用户提供三维交互式场景已经成为现实。
而以虚拟现实为代表的显示技术和图形信息管理技术也取得了很大进步。目前,
全球有数以千计的公司的业务涉及或正在使用三维交互式图形系统,而这些软件
在显示、模拟、仿真、计算机辅助设计、科学数据可视化及分析领域的应用随处
可见。这些应用已成为科研开发、工业生产中的重要工具。
从系统开发人员的角度看,相比工业标准 OpenGL 或其它的图形库,
OpenSceneGraph 的优点显而易见。除了开源和平台无关性以外,它封装并提供
了数量众多的提升程序运行时性能的算法、针对包括分页数据库在内的几乎所有
主流数据格式的直接数据接口、以及对脚本语言系统 Python 和 Tcl 的支持,特别
的,支持脚本语言系统的意义不仅限于用户可以使用除 C++语言以外的工具进行