2OpenSceneGraph简介2.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2.1设计和体系OSG适用于多种硬件平台,并可在多种不同的图形硬件上进行高效的、实时的渲染。为达到这样的目的,OSG采用了以下设计理念和工具进行系统的设计和构建:•ANSI标准C++;•C++标准模板库(STL);•设计模式(Designpatterns,Gamma95)2.2命名习惯命名空间:OSG的域名空间使用小写字母开头,然后可以使用大写字母以避免混淆。例如,osg,osgSim,osgFX等。类:OSG的类名以大写字母开头,如果类的名称是多个单词的组合,此后每个单词首字母大写。例如,MatrixTransform,NodeVisitor,Optimizer。类成员:OSG类的方法名使用小写字母开头,如果方法的名称是多个单词的组合,此后每个单词的首字母大写。例如,addDrawable()。模板:OSG模板的命名用小写字母,多个单词之间使下划线分隔。例如,ref_ptr,graph_array。静态量:静态变量和函数的名称使用s_开头,此后的命名与类成员变量及函数的命名方法相同。例如,s_applicationUsages_ArrayNames()全局量:全局类的实例命名用g_开头。例如,g_NotifyLevelg_readerWriter_BMP_Proxy2.3OSG的五大动态链接库(1)OSG核心库:它提供了基本的场景图形和渲染功能,以及3D图形程序所需的某些特定功能实现。(2)NodeKits:它扩展了核心OSG场景图形节点类的功能,以提供高级节点类型和渲染特效。(3)OSG插件:其中包括了2D图像和3D模型文件的读写功能库。(4)互操作库:它使得OSG易于与其它开发环境集成,例如脚本语言Python和Lua。(5)不断扩展中的程序和示例集:它提供了实用的功能函数和正确使用OSG的例子。OSG核心库(包括四个链接库)(1)osg库包含了用于构建场景图形的场景图形节点类,用作向量和矩阵运算的类,几何体类,以及用于描述和管理渲染状态的类。还包括3D图形程序所需的典型功能类,例如命令行参数解析,动画路径管理,以及错误和警告信息类。命名空间:osg头文件:OSG_DIR/include/osgWindows库文件:osg.dll,osg.libLinux和MacOSX库文件:libosg.lib(2)osgUtil库OSG的工具库,用于场景图形及其内容的操作,场景图形数据统计和优化,以及渲染器的创建。它还包括了几何操作的类,例如Delaunay三角面片化(Delaunaytriangulation),三角面片条带化(trianglestripification),纹理坐标生成等。(3)osgDB库包括了建立和渲染3D数据库的类与函数。其中包括用于2D和3D文件读写的OSG插件类的注册表,以及用于访问这些插件的特定功能类。osgDB数据库分页机(databasepager)可以支持大型数据段的动态读入和卸载。(4)osgViewer库这个库是OSG的2.0版本新增的,它包含了场景中视口及可视化内容的管理类。osgViewer已将OSG集成到多种多样的视窗系统中。2.4osg库的主要类场景图形类几何体类状态管理类使用类场景图形类Node类:所有类的基类Group类:是所有可分支节点的基类,图形空间组织结构的关键类。Geode类(GeometryNode):叶节点,包含了osg::Drawable对象,该类对象可以与任意多个Drawable对象关联。LOD类:MatrixTransform类:用于实施子节点几何体空间转换的矩阵,以实现场景对象的旋转、平移、缩放、倾斜、映射等操作。Switch类:允许或禁止子节点的运作。几何体类Drawable类:用于存储几何数据信息的基类,Geode维护了一个Drawable的列表。Drawable是纯虚类,无法直接实例化。用户必须实例化其派生类。Drawable的重要派生类:Geometry类ShapeDrawable类(允许用户程序绘制预定义的几何形状,如球体、圆锥体和长方体)。几何体类(续)Geometry类:Geometry类与PrimitiveSet类相关联,实现了对OpenGL顶点数组功能的高级封装。Geometry保存顶点数组的数据,纹理坐标,颜色,以及法线数组。PremitiveSet类:这个类松散地封装了OpenGL的绘图基元,包括点(POINTS),线(LINES),多段线(LINE_STRIP),封闭线(LINE_LOOP),四边形(QUADS),多边形(POLYGON)等。几何体类(续)Vector类(Vec2,Vec3):OSG提供了预定义好的二维,三维和四维元素向量,支持float或者double类型。使用这些向量来指定顶点、颜色、法线和纹理坐标的信息。Array类(Vec3Array,Vec2Array):OSG定义了一些常用的数组类型,如用于贴图纹理坐标的Vec2Array。指定顶点数组数据时,程序首先将几何数据保存到这些数组中,然后传递至Geometry类对象。状态管理类OSG提供了状态管理类,用以保存场景图形所需的OpenGL渲染状态。OSG允许状态与任何场景图形节点相关联,在一次遍历中,状态将呈现出某种继承关系的。主要包括状态集类(StateSet)、模式类(Modes)、属性类(Attributes)、纹理模式和属性类、继承标志类。状态集合(StateSet)OSG在StateSet类中保存一组定义状态数据(模式和属性)。场景图形中的任何osg::Node都可以与一个StateSet相关联。模式(Modes)与OpenGL的函数glEnable()和glDisable()相似,模式用于打开或关闭OpenGL固定功能(fixed-function)的渲染管道,例如、灯光,混合和雾效。方法osg::StateSet::setMode()在StateSet中保存一个模式信息。实用类Referenced类:是所有场景图形节点和OSG的许多其它对象的基类。它实现了一个用于跟踪内存使用情况的引用计数(referencecount)。如果某个继承自Referenced的对象,其引用计数的数值到达0,那么系统将自动调用其析构函数并清理为此对象分配的内存。实用类(续)ref_ptr:模板类ref_ptr为其模板内容定义了一个智能指针,模板内容必须继承自Referenced类(或提供一个与之相同的、能实现引用计数的接口)。当对象的地址分配给ref_ptr时,对象的引用计数将自动增加。同样,清除或者删去ref_ptr时,对象的引用计数将自动减少。实用类(续)Object类:是OSG中一切需要I/O支持,拷贝和引用计数的对象的基类。所有的节点类,以及某些OSG对象均派生自Object类。Notify类:osg库提供了一系列控制调试,警告和错误输出的函数。用户可以通过指定一个来自NotifySeverity枚举量的数值,设定输出的信息量。OSG中的大部分代码模块执行时都会显示相关的信息。NodeKits库由两部分组成:NodeKit本身,及针对.osg的封装插件库。包含有六种NodeKits。osgFX库:提供了额外的场景图形节点,以便于特效的渲染,例如异向光照(anisotropiclighting),凹凸贴图,卡通着色等。osgParticle库:此类NodeKit提供了基于粒子的渲染特效,如爆炸、火焰、烟雾等。NodeKits库(续)osgSim库:提供了仿真系统中以及渲染OpenFlight数据库所需的特殊渲染功能,例如地形高程图,光点节点,DOF变换节点等。osgText库:提供了向场景中添加文字的得力工具,可以完全支持TrueType字体。NodeKits库(续)osgTerrain库:提供了渲染高度场数据的能力。osgShadow库:提供了支持阴影渲染的框架结构。

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功