第一章 OSG三维渲染引擎概述
OSG的主要功能包括以下几个方面:
1. 可以实时高效地绘制和控制使用建模软件所建立的3D模型, 如3DMAX、MAYA、Creator等制作的3D模型, 该功能是场景渲染的基本功能。
2. 支持多种外设, 如操作杆、游戏柄、轨迹球、方向盘、键盘鼠标等。
3. 除了传统的二维屏幕上进行三维展示外, OSG还可以完成红绿偏移的立体投影, 实现真正的立体展示。
4. 支持骨骼动画、关键帧动画、颜色动画等各种流行的动画。
OSG的相关扩展:
OSG的相关扩展,OSG针对每个特定应用,也有很多的开发者进行开发和完善,难能可贵的是然后还进行了开源。本文的目的是让大家能够站在巨人肩上,可以选择在能找到的成熟的开源库基础上开发。 ----FreeSouth注。
- osgBullet: OSG和 Bullet 物理引擎的结合。
- osgCairo: OSG 和 Cairo API 的结合,Cairo是一个2D图形库。
- osgEarth: 基于分页数据的功能强大的开源地球地形系统。.
- osgEphemeris: 模型星象数据的开源工程。
- osgOcean: 用来模拟海洋。
- osgRiver: 有爱好者基于osgOcean修改的模拟河流的库。
- osgPPU: 一个基于OSG的post-render的库。
- osgToy and osgVRPN: OSG实用库,包含OSG和VRPN的结合。
- osgWorks: 一个OSG的工具库,包含很多实用类。
- osgTransparencyToolkit: 一个实现了多重透明的OSG实用工具库。
- osg.JS: 使用JS实现的OSG。
- osgAndroid: 在Android上开发OSG程序的工具库。
- osgRecipes: array主导的,将OSG与AntTweakBar、AssImp、Awesomium、FreeImage、Kinect、PhysX、Spark、TUIO、VLC进行结合的集合库。
- osgExp: 用于在3DMAX中将模型导出成OSG/IVE。
- osgNV: 为OSG提供对CG语言的支持,提供一些示例。
- osgART: OSG的增强现实库。
- osgGLSL: OSG写的Shader的一些示例。
- osgToy: toys for OSG。
- osgVisual: 一个地形可视化库,里面包含了OSG和sliverning, triton相结合的功能。
- osgXI: array主导的,包含了很多GPU效果和游戏开发组件,也包含对CG以及maya导出的支持。
- delta3D: 美国海军研院所投入研发的基于OSG的军事仿真库。
- osghimmel: OSG另一个和天空星象模拟的库。
- osgEphemeris: 天体和星象模拟软件。
- flightgear: 基于OSG的极为专业的飞行模拟软件,有osgEarth的版本。
- osgcal: OSG和cal结合的库。CAL是做骨骼动画的。
- osgHaptics: OSG和Haptics结合的库。Haptics是一个触觉相关的系统。
- osgVirtualEnvironment: Configurable, device-independent virtual reality engine built on top of OpenSceneGraph.
- osgAudio: 3D声音库,将OSG与FMOD结合。
- osgAL: 3D声音库,将OSG与openAL结合。
- osgModeling: array主导的,使用OSG建贝塞尔曲面等各种偏数学模型的库。
- osgode: 将osg与ODE相结合的库,ODE是个物理引擎。
- osgsmallcity: 如其名所述,模型一个小城市。
- osgpango: osg和pango的结合,pango是个专业的文字渲染库,比如:可以渲染跳动的文字等。
OSG的学习资料
1. 《OpenSceneGraph参考手册》(OpenSceneGraph Refrence Manuals)
2. 《OpenSceneGraph快速入门指南》(OpenSceneGraph Quick Start Guide)
3. 《最长的一帧》
4. 《OpenSceneGraph三维渲染引擎设计与实践》
5. 《OpenSceneGraph 3.0 Beginner‘s Guide》
6. 《OpenSceneGraph三维渲染引擎编程指南》
7. 《OpenSceneGraph程序设计》
OSG的编译与安装
源码包下载: http://www.openscenegraph.org/downloads/developer_releases/OpenSceneGraph-3.2.0.zip
第三方库下载: http://trac.openscenegraph.org/projects/osg/wiki/Downloads/Dependencies
数据文件下载: http://trac.openscenegraph.org/projects/osg/wiki/Downloads/SampleDatasets
CMAKE 编译配置:
勾选以下可选项:
BUILD_MFC_EXAMPLE
BUILD_OSG_APPLICATION
BUILD_OSG_EXAMPLES
配置3rdParty:
COLLADA_DOM_ROOT : X:\3rdparty\include\1.4\dom
COLLADA_ZLIB_LIBRARY : X:\3rdparty\lib/zlib1.lib
CURL_INCLUDE_DIR : X:\3rdparty\include
CULR_LIBRARY : X:\3rdparty\lib\curllib.lib
CULR_LIBRARY_DEBUG : X:\3rdparty\lib\curllibd.lib
FREETYPE_INCLUDE_DIR : X:\3rdparty\include
FREETYPE_INCLUDE_DIR_freetype2 : X:\3rdparty\include
FREETYPE_INCLUDE_DIR_ft2build : X:\3rdparty\include
FREETYPE_LIBRARY : X:\3rdparty\lib\freetype237.lib
FREETYPE_LIBRARY_DEBUG : X:\3rdparty\lib\freetype237d.lib
GIFLIB_INCLUDE_DIR : X:\3rdparty\include
GIFLIB_LIBRARY : X:\3rdparty\lib\giflib.lib
GIFLIB_LIBRARY_DEBUG : X:\3rdparty\lib\giflibd.lib
GLUT_INCLUDE_DIR : X:\3rdparty\include
GLUT_LIBRARY : X:\3rdparty\lib\glut32.lib
GLUT_LIBRARY_DEBUG : X:\3rdparty\lib\glut32D.lib
GLUT_glut_LIBRARY : X:\3rdparty\lib\glut32.lib
JPEG_INCLUDE_DIR : X:\3rdparty\include
JPEG_LIBRARY : X:\3rdparty\lib\libjpeg.lib
JPEG_LIBRARY_DEBUG : X:\3rdparty\lib\libjpegD.lib
PNG_INCLUDE_DIR : X:\3rdparty\include
PNG_LIBRARY : X:\3rdparty\lib\libpng13.lib
PNG_LIBRARY_DEBUG : X:\3rdparty\lib\libpng13D.lib
TIFF_INCLUDE_DIR : X:\3rdparty\include
TIFF_LIBRARY : X:\3rdparty\lib\libtiff.lib
TIFF_LIBRARY_DEBUG : X:\3rdparty\lib\libtiffD.lib
ZLIB_INCLUDE_DIR : X:\3rdparty\include
ZLIB_LIBRARY : X:\3rdparty\lib\zlib1.lib
ZLIB_LIBRARY_DEBUG : X:\3rdparty\lib\zlib1d.lib
注: CMAKE -G "Visual Studio 12 2013"
OSG的组织结构
OSG采用命名空间的开发模式, 每个命名空间代表一大类功能, 如osgDB、osgViewer、osgFX、osgShadow等。总的来说, OSG的组成部分分为以下几个方面:
OSG 核心库: 提供了OSG渲染绘制以及进程等基本功能;
OpenThreads: OSG使用OpenThreads完成进程管理;
OSG 库: 提供渲染绘制最基本的功能, 以及场景结点管理、图形绘制以及渲染状态管理等功能;
osgDB库: 提供对模型的读写功能, 与读写相关的功能都使用此类调度, 包括数据分页管理等功能;
osgGA库: 提供事件响应功能, 通过与操作系统交互, 使得程序可以响应外来事件, 如键盘、鼠标、方向盘等各类事件;
osgViewer库: 提供OSG程序中的框架, 可理解为场景管理库;
osgUtil库: 提供一些实用的绘制优化等功能, 如迪洛尼三角面绘制功能、法线生成功能等;
结点工具箱: 扩展OSG核心功能, 为OSG渲染场景提供某些特效和高级功能, 如动画、阴影、大地形、文字显示等;
osgAnimation: 场景动画处理库;
osgFX: 场景特效库;
osgManipulator: 提供一些操作器, 如TrackBall、驾驶等;
osgParticle: 粒子系统库, 提供一些实用功能, 如雨效、雪效、火焰等;
osgShadow: 提供场景阴影绘制功能, 并为多种阴影绘制技术给予支持;
osgSim: 仿真工具库, 包括DOF结点、点光源等诸多与虚拟仿真相关功能;
osgTerrain: 地形处理库, 用于实现读取和显示实时地形;
osgText: 文字处理库;
osgVolume: 实现体渲染, 并提供各种体渲染的技术支持;
osgWidget: osg的UI库, 提供按钮、标签栏等常用UI设计功能;
osgIntrospection: 封装OSG与其他语言交互的实现代码;
osg文件读写插件: 提供OSG所支持的模型格式, 几乎包括了所有图片与3D模型格式。
OSG常用工具
osgViewer: 模型查看工具
osgVersion: 库版本检测
osgArchive: 压缩工具
osgConv: 格式转换与压缩工具
第二章 OSG应用基础
事件响应
基本几何图元
模型读写
模型控制
超级指针
第三章人机交互与动画控制
OSG事件响应机制
大多数应用程序都响应键盘和鼠标事件, 键盘和鼠标事件是操作系统的标准事件, 系统捕获这些事件之后将其放入消息队列中, 然后由个应用程序进程处理。
动画
MD2模型格式是大型网络游戏中常用的模型格式, OSG有支持读取MD2格式的插件。
关键帧动画, 也称顶点动画, 是通过绘制每一帧来形成动画, 每一帧其实就是模型特定姿态的一个"快照"。通过在帧间进行插值, 可以得到平滑的动画效果。这有点像把每个动作画在纸上, 最后翻阅而形成动画。
骨骼动画, 是指模型具有互相连接的“骨骼”组成的骨架结构,通过改变骨骼的朝向和位置来为模型生成动画。骨骼动画比顶点动画要求更高的处理器性能,但同时它也具有更多的优点,骨骼动画可以更容易、更快捷地创建。需要注意的是, 只有矩阵是无法形成动画的, 还需要蒙皮, 加之蒙皮的运动, 带动蒙皮, 就形成动画了。
OSG定义骨骼动画由三部分组成: 骨骼、蒙皮、骨骼运动。
骨架(osgAnimation::Skeleton): 存放骨骼的骨架, 每一个骨骼的根节点, 都要依附于一个骨架。
骨头(osgAnimation::Bone): 真正组成整个骨骼动画的矩阵变换。
运动(osgAnimation::BasicAnimationManager): 用来管理骨骼运动的类, 每一种运动对应一个Channel。
蒙皮(osgAnimation::RigGeometry): 定义蒙皮, 通过osgAnimation::VertexInfluenceMap来使骨骼和蒙皮进行关联。
第四章 漫游、跟随与碰撞检测
操作器几乎是任何VR项目的基础。漫游器是操作器中很重要的一种, 对漫游器有一个最重要的要求, 即按照用户要求的方式进行漫游。
OSG中场景的核心管理器是Viewer, 而漫游时需要响应事件, 如鼠标移动, 场景也会随之变化, 响应事件的类是osgGA::GUIEventHandler。