三维渲染引擎之——OSG

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。

时间: 2024-08-29 07:00:21

三维渲染引擎之——OSG的相关文章

三维渲染引擎设计与时间(一)

一.初始osg 三维渲染引擎:为了实现三维场景图形的结构管理和绘制而提供的一系列API的集合.包括构建层和交互层. Crystal Space.Java3D.Unreal-- osg库:构件场景图形的场景图形节点类.用作向量和矩阵运算的类:可绘制体和几何体类:用于描述和管理渲染状态的类:以及图形程序所需的典型功能类. osgDB库:用于2D和3D文件读写的插件类注册器,以及用于访问和读写这些插件的特定功能类:数据的动态分页调度机制 osgUtil库:实用工具库.包括场景图形数据统计和优化工具.渲

三维渲染引擎设计与实践(八)

8.2三维人机交互工具 osg实现了三维场景的漫游以及场景中三维对象的操纵. 8.2.1漫游器 osgGA::MatrixManipulator类 漫游器也是事件处理器GUIEventHandler的一种. viewer使用setCameraManipulator()函数来设置一个针对此视景器的漫游器. 8.2.2拖拽器 为要操纵的物体设置一个MatrixTransform父节点,通过改变这个父节点的变换矩阵的内容,进而改变作为操控对象的子节点的表现形式. osgManipulator库中拖拽器

三维渲染引擎设计与实践(六)

6.2纹理与纹理属性 6.2.1纹理的实现方法 纹理是一个数组的概念,其中每一个数据(RGB颜色以及Alpha值,或者其他系统及用户定义的类型)称作一个纹素(texel). 每一个映射通道称为一个纹理单元. 对于场景中的节点或几何体应用纹理属性时,通常需要预先指定每个顶点的纹理坐标,以便将图像正确贴至物体上.只有几何体可以设置纹理坐标,因此在设置节点的纹理之前,必须得到该节点子树中所有的几何体对象并设置他们的纹理坐标. geom->setCoordArray() Texture作为各种纹理表达方

三维渲染引擎之——VTK

作为医学领域使用广泛的渲染类库,VTK本身也是基于OpenGL作为底层开发的,其渲染模式与另一个三维视觉类库OSG类似,其实本身这样的三维图形库基本都是来源于对OpenGL的封装. 通过VTK将科学实验数据如建筑学.气象学.医学.生物学或者航空航天学,对体.面.光源等等的逼真渲染,从而帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果.特别是医学方面,有时候我们需要根据仪器枯燥的数据抽象出一个具体的.可视化强的三维模型,以便于医生分析人体各个器官的细节,VTK真是基于这种

三维渲染引擎设计与实践(四)

五.绘制几何对象和文字 帧缓存(Frame Buffer)为用户与显示设备交互的一个接口,将显示的画面抽象成一块可以进行读写操作的内存区域. 帧缓存的每一个存储单元都对应显示屏上的一个像素.整个缓存空间对应当前屏幕上渲染的一帧. 5.1几何元素的储存 顶点属性:空间坐标值.法线.颜色坐标.纹理坐标.雾坐标. 点的法线是在使用Phone或Gouraud模型时计算光照使用. 立即模式(immediate mode)      顶点数组(vertex array)       显示列表(display

三维渲染引擎设计与实践(三)

4.3.2 空间变换节点 世界坐标系是系统的绝对坐标系,在没有建立用户坐标系之前,所有的坐标都是以该坐标的原点来确定各自的位置的. OSG中的坐标系是X正向向右,Y轴正向向里,Z轴正向向上 OpenGL的坐标系是X正向向右,Y轴正向向上,Z轴正向向外 Transform公有继承Group类,AutoTransform公有继承Transform SRT   比例 scale 旋转rotate 平移transfom 4.3.3开关节点Switch 作用是:在场景运行的某一时刻,它的某些子节点被隐藏和

三维渲染引擎专题--各种数格式总结

瓦片图层数据 OpenStreetMapImagery(免费开源地图服务,背后有某大公司支持) BingMapsImagery(微软Bing Maps Imagery REST API) GoogleEarthImagery (谷歌Google Earth Imagery API) ArcGisMapServerImageryProvider(ArcGIS MapServer) 矢量图层数据 GeoJSON TopoJSON KML GML CZML 高程图层数据 ArcGisImageServ

三维渲染引擎设计与实践(二)

4.3重要节点的功能实现 4.3.1空间变换节点 OpenGL中变换矩阵堆栈(Matrix Stacks) opengl中对象的控件变换是通过对模型视点(model-view)矩阵堆栈的操作完成的:从初始的全局世界坐标系开始,每当我们在某个空间坐标系下绘制完成一个物体以后,即记录当前的位置.姿态等变换信息(入栈),然后在变换后的坐标系下开始新的绘制,完成后返回到原先的变换位置(出栈),最终返回到最先的全局坐标系中. 方法一 直接设置空间变换矩阵的值:方法二  直接设置变换的平移.旋转和缩放值 S

OSG(OpenSceneGraphic) 渲染引擎架构--整体认识

本文参考<<osg最长一帧>>, <<OpenSceneGraph三维渲染引擎编程指南>>, <<OpenSceneGraph三维渲染引擎设计与实践>> 整理而来,  感谢大牛们的精彩著作. 相比Ogre来说, Ogre代码很规范, 只是入门资料较少,如果能在学习之前能总体上对架构有个印象就好了, 免得盲人摸象啊, 不过,还好有OSG. 场景相关: Node, Geode, Group, Transform, LOD, Camera,