OpenSceneGraph(简称OSG)使用OpenGL技术开发,是一套基于C++平台的应用程序接口(API),它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。它作为中间件(middleware)为应用软件提供了各种高级渲染特性,IO,以及空间结构组织函数;而更低层次的OpenGL 硬件抽象层(HAL)实现了底层硬件显示的驱动。——来自百科
OSG封装了OpenGL的渲染方式,大大简化了图形绘制、渲染方式,优化了渲染性能,其特点总结如下:
性能
支持视图投影剔除(view frustum culling)、隐藏面剔除(occlusion culling)、小特性剔除(small feature culling)、细节层次节点(LOD)、OpenGL 状态排序(state sorting)、顶点数组、顶点缓冲对象(vertex buffer objects)、OpenGL 着色语言和把显示列表(display lists)作为场景图内核的一部分。它们共同使 OpenSceneGraph 成为一个高性能的图形库。OpenSceneGraph也支持绘制流程(drawing process)的定制,比如场景图的连续细节层次(CLOD)的网格(参见虚拟地形项目和 Delta3D)。
快速开发
场景图的内核封装了包括最新扩展的大部分 OpenGL 功能,提供诸如剔除和排序的渲染优化功能,同样提供能快速开发高性能图形应用程序的一整套补充库。应用程序开发者可以更关心实质性内容和如何操控这些它们,而不再是底层的代码通过学习已有的场景图,比如:Performer 和 Open Inventor,把它们同像设计模式这样现代软件工程理念联合起来,加上早期开发周期中的大量反馈信息,设计一个清晰的可扩展的库已经成为可能。用户可以很简单的适应 OpenSceneGraph 并且把它集成到自己的应用程序中
数据装载
为了读入和写出数据库,数据库支持库(osgDB)支持动态的插件机制,从而支持大量数据格式,目前的发布版本有 55 种单独的插件支持 3D 数据和图像格式的装载。
支持的 3D 数据格式包括 COLLADA、LightWave (.lwo)、Alias Wavefront (.obj)、OpenFlight (.flt),多线程页面调度支持的 TerraPage (.txp)、Carbon Graphics GEO (.geo)、3D Studio MAX (.3ds)、Peformer (.pfb)、AutoCAd (.dxf)、Quake Character Models (.md2)、Direct X (.x)和 Inventor Ascii 2.0 (.iv)/ VRML 1.0 (.wrl)、Designer Workshop (.dw)、AC3D (.ac) 和自带的.osg ASCII 文本格式。
支持的图像格式包括.rgb、.gif、.jpg、.png、.tiff、.pic、.bmp、.dds (包含压缩的一系列Mip 贴图影像)、.tga 和 quicktime (在 OSX 环境下),全范围的高质量、抗锯齿字体也能通过freetype 插件支持,基于字体的图像也可以通过.txf 插件支持。
用户也可以通过与一个同盟项目(VirtualPlanetBuilder)生成大规模地形空间数据(multi GB),使 用 OpenSceneGraph 的自带数据分页调度支持来查看这些数据。
节点工具箱
这个场景图同样有一套节点工具集,它们是可以在你的应用程序中编译或者在运行时装载的独立库:
? osgParticle——粒子系统
? osgText——高质量抗锯齿文本
? osgFX——特效框架结构
? osgShadow——阴影框架结构
? osgManipulator——交互控制
? osgSim——虚拟仿真相关的效果
? osgTerrain——地形绘制
? osgAnimation——动画
? osgVolume——体绘制(通过 Dicom 插件支持医学数据)
可移植性
场景图的内核已经被设计成尽量少的依赖具体的平台,很少的部分超出了标准 C++程序和 OpenGL。这就使得这个场景图可以快速移植到大部分系统中——最开始在 IRIX 开发,然后移植到 Linux,接着 到 Windows,再后来就是 FreeBSD, Mac OSX,Solaris,HP-UX, AIX 甚至是 PlayStation2!
完全独立与窗口操作系统的场景图内核库使得用户在它上面可以增加他们自己的指定窗口库和应用程序,在发布版本中 osgViewer 库提供自带窗口支持,可支持 Windows (Win32),Unix (X11) 和 OSX (Carbon)。osgViewer 库也可以轻松的和你的窗口开发包集成起来,作为OpenSceneGraph-2.0 发布版本的一部分,有例子演示了如何在 Qt, GLUT, FLTK, SDL, WxWidget, Cocoa and MFC 中的使用。
可伸缩性
场景图内核的可扩展性使得它不仅仅可运行在便携式设备,甚至高端的多核、多 GPU的系统和集群上。这可能是因为场景图内核为 OpenGL 的显示列表和纹理对象支持多重图形渲染环境(multiple graphics contexts),剔除和绘制的遍历过程被设计成隐藏渲染数据为局部变量,这样可以以几乎只读的方式使用场景图内核。这样就允许多对剔除—绘制过程运行在多个 CPU 上,CPU 则是绑定在多个图形子系统之上。对多图形设备渲染环境和多线程的支持可以在 osgViewer 中方便使用,发布版本中所有的例子都可以以多线程和多 GPU 的方式运行。
多语言支持
OpenSceneGraph 以社区项目的形式支持多种语言,比如 Java,Lua 和 Python。