OpenSceneGraph概览——组件

OSG运行时由一些列的动态链接库和可执行文件组成。大致可分为一下五大类:

1、OSG核心库。OSG核心库包含了四个链接库:/OSG库/osgUtil库/osgDB库/osgViewer库

    OSG链接库:命名空间 osg;Windows下文件:osg.dll,osg.lib;它提供了基本的场景图形和渲染功能;包含了以下常用类:

    场景图形类:

    场景图形类用于辅助场景图形的创建。OSG中所有场景图形类都继承自osg::Node。概念上讲,根节点,组节点和叶节点都是不同的节点类型,都源自osg::Node,只是不同的类,会提供不同的场景图形功能。OSG节点中的根节点并不是特定的节点类型,仅仅是一个没有父类的osg::Node类。

    1)Node:Node类是场景图形所有类的基类。包含了场景图形遍历,拣选,程序回调,以及状态管理办法。

     2)Group:Group类是所有可分支几点的基类。是空间组织结构的关键类。

     3)Geode:Geode类相当于叶节点。也就是没有分支。但是它包含了osg::Drawable对象,其中包含了几何体数据。

     4)LOD:LOD类根据观察者和节点的距离选择显示子节点,创建场景中的多个层级显示。

     5)MatrixTransfrom:MatrixTransform类包含用于几何体空间变化的矩阵,从而实现场景对象的旋转,平移,缩放,倾斜,映射等功能。

     6)Switch:Switch类用布尔掩板来允许和禁止子节点的运作。

    另外还有很多其他功能的节点类型。参考osg库的头文件来了解。

    几何体类:

    Geode类是OSG的叶节点,包含几何体数据。以下几个类实现对几何体的存储:

    1)Drawable:Drawable类是用于存储几何体信息的基类,是纯虚类无法直接实例化,用户必须实例化它的派生类,如Geometry或ShapeDrawable(这里可以让用户根据需要绘制预定义的几何形状如球体,长方体等)

    2)Geometry:Geometry类与PrimitiveSet类相关联,实现堆OpenGL顶点数组功能的高级封装。Geometry保存顶点数组的数据,纹理坐标,颜色以及法线数组。

    3)PrimitiveSet:PrimitiveSet类提供了OpenGL顶点数组绘图命令的高层次支持。用户可以从相关的Geometry中获得保存的数据,再使用这个类来指定要绘制的几何体的类型。

    4)Vector:Vector类(Vec2,Vec3等);OSG提供了预定义的二维,三维和四维的预定义元素向量,支持float和double类型。使用这些向量来指定顶点,颜色,法线和纹理坐标的信息。

    5)Array:Array类(Vec2Array,Vec3Array等);OSG预定义了一些常用的数组类型,如用于贴图纹理坐标的Vec2Array,指定顶点数组数据时,程序首先将几何数据保存到这些数组中,然后再传递给Geometry对象。

   状态管理类:

    OSG提供了一种机制,用于保存场景图形所需的OpenGL渲染状态。在拣选遍历中,同一状态的几何体将被组合集中到一起,使状态的改变最小化;在绘制遍历中,状态管理代码将记录当前状态的历史轨迹,以清除冗余的渲染状态变更。

    与其他场景图形系统不同,OSG允许状态与任何场景图形节点相关联。

    1)状态集合StateSet:OSG在StateSet类中保存一组定义状态数据(模式和属性),场景图形中的任何osg::Node都可以与一个StateSet相关联。

    2)模式(Modes):与OpenGL的函数glEnable()和GLDisable()相似,模式用于打开和关闭OpenGL固定功能的渲染管道。例如灯光,混合等的打开和关闭;方法osg::StateSet::SetMode()再StateSet中保存一个模式信息。

    3)属性Attributes:引用程序使用属性来指定状态参数,例如混合参数,材质属性,雾颜色等。方法osg::StateSet::SetAttribute()再StateSet中保存属性信息。

    4)纹理模式和属性:纹理模式和属性可应用在OpenGL多重纹理的某个指定纹理单元上。应用程序必须在设定纹理模式和属性时提供纹理单元的信息,和OpenGL不同,OSG不存在缺省的纹理单元。StateSet类的方法setTextureMode()和setTextureAttribute()用于设定状态参量以及纹理单元信息。

    5)继承标志:OSG提供了一些标志量,用于控制场景图形遍历中的状态值。缺省状态下,子节点中的状态集合将会集成父节点的状态集合,但是也可以强制父节点的状态重载子节点的状态,或者指定子节点的状态受到保护而不被其父节点重载。

   其他常用类:

    1)Referenced类:它是所有场景图形节点对象和OSG的许多其他对象的基类。它实现了一个用于跟踪内存使用情况的内存计数(reference count),如果某个继承自Referenced的对象,其引用计数数值等于0,那么系统将自动调用其析构函数,并清理为此对象分配的内存。

    2)ref_ptr类:模板类ref_ptr为其模板内容提供了一个智能指针,模板内容必须继承自Referenced类或提供一个类似的接口,当对象的地址分配给ref_ptr<>时,对象的引用计数将自动增加,同样删除该模板类对象时,对象的引用计数也会自动减少。

    3)Object:纯虚类Object类是OSG中一切需要I/O支持、拷贝和引用计数的对象的基类。所有的节点类,以及某些OSG对象均派生自Object类。

    4)Notify:OSG库提供了一系列控制调试,警告和错误输出的函数。用户可以通过指定一个来自NofifySeverity枚举量的数值,来设定输出的信息量。

   osgUtil链接库:命名空间 osgUtil,Windows库文件:osgUtil.dll,osgUtil.lib。它集合了很多用于场景图形处理和几何体修改的工具。最知名之处在于一系列支持更新、拣选和绘制遍历的类。在典型的OSG程序中,这些遍历由更高层次的支持类。如osgViewer::Viewer来进行处理,用户不需要与他们就行交互。其中有一些常用的类:

    交运算(Intersection)

    一般来说,3D程序需要为用户提供一些实现交互和选择的功能,比如图形对象的拾取,通过大量用于场景图形交运算的类,osgUtil可以高效的支持拾取操作。当用户程序从需要进行图形对象拾取的用户那里接收到事件输入时,可以使用以下的类,获取场景图形中被拾取部分的信息。

    1)intersector:Intersector是一个纯虚类,它定义了相交测试的接口。osgUtil从Intersection类继承了多个类,适用于各种类型的几何体。执行相交测试时,应用程序将继承自Intersector的某个类实例化,传递给IntersectionVisitor的实例,并随后请求该实例返回数据以获取相交运算的结果。

    2)IntersectionVisitor:IntersectionVisitor类搜索场景图形中与指定几何体相交的节点。而最后相交测试的工作将在Intersector的继承类中完成。

    3) lineSegmentIntersector:该类继承自Intersector类,用于检测指定线段和场景图形之间的相交情况,并向程序提供查询相交测试结果的函数。

    4)PolytopeIntersector:与LineSegmentIntersector类似,用于检测由一些列平面构成的多面体的相交情况。当用户点击鼠标,希望获取鼠标附近的封闭多面体区域时,polytopeIntersector类相当有用。

    5)PlaneIntersector:用于检测一些列由平面构成的平面的相交情况。  

    优化

    场景图形的数据结构在理论上有利于实现优化和数据统计工作。osgUtil库包含的类可以遍历并修改场景图形,以实现渲染的优化,和收集场景统计信息的目的。

    Optimizer:用于优化场景图形,其属性使用一组枚举标志进行控制,每一种标志都代表一种特定的优化方式。

    Statistics和statsVistor:为了能高效的设计3D应用程序,开发者应当对将要渲染的对象有更多的了解。StatsVistror类返回一个场景图形中节点的总数和类型,而Statistics类返回渲染几何体的总数和类型。

    几何体操作

    许多3D应用程序都要对读入的几何体进行修改,以获取所需的性能和渲染效果,osgUtil库包含的类,支持一些通用几何体的运算。

    Simplifier:使用Simplifier类减少Geometry对象中几何体的数目,有助于低细节层次的自动生成。

    Tessellator:OpenGL不直接支持凹多边形和复杂多边形。Tessellator类可以根据一组顶点的列表,生成由前述顶点列表所述的多边形,即一个osg::PrimitiveSet。

    DelaunayTriangulator:实现了Delaunay三角网格化预算,根据一组顶点的集合生成一系列的三角形。

    TriStripVistor:一般来说,由于共享顶点的缘故,连续的条带图元(strip primitives)的渲染效率要高于独立的图元(individual primitives)。TriStripVistor类可以遍历场景图形,并将多边形图元转换成三角形和四边形条带。

    SmoothingVistor:该类可以生成顶点法线,也就是所用共享此顶点的面的法线的平均值。

    纹理贴图生成:osgUtil库包含了帮助建立反射贴图,中途向量(half - way vector)贴图,以及高光贴图的代码。此外,使用TangentSpaceGenerator类还可以逐个的建立各顶点的向量组,帮助实现凹凸贴图。

    osgUtil还包含未提及的类,可参考源代码以及头文件。

    OSGDB链接库

    OSGDB库允许用户程序加载,使用和写入3D数据库,采用插件管理的架构,可以支持大量常见的2D和3D模型文件格式。osgDB负责维护插件的信息注册表,并负责检查将要载入的OSG插件接口的合法性。

    OSG可以支持自己的文件格式。.osg文件是对场景图形的一种无格式ASCII码文本描述。而.osga文件是一组osg文件的有序集合。osgDB库包含了以上文件格式的支持代码,此外,OSG还支持一种二进制文件格式.ive。

    由于大型的3D数据库通常是段数据段的组合体,因此应用程序从文件中读取各部分数据库信息时,需要在不干扰当前渲染的前提下,以后台线程的方式来运行。osgDB::DatabasePager提供了这样的功能。

2、NodeKits。

  OSG核心库的一种扩展,现在扩展了6种常见库:osgFX库、osgParticle库、osgSim库、osgText库、osgTerrain库和osgShadow库,这些库与osg核心库共同构成OSGAPI,提供高级节点类型和渲染特效。

3、OSG插件。包括了2D图片或者3D模型文件的读写功能库。

4、互操作库。它使得OSG易于与其他开发环境集成,Pyphon等。

5、程序和示例集合。提供了实用功能函数和如何正确使用OSG示例。

转载于:https://www.cnblogs.com/jzlcba/p/7800101.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenSceneGraph快速入门指导本书是一本对于OpenSceneGraph(OSG)的简明介绍。OSG 是一个跨平台的开源场景图形程序开发接口(API)。本书特别地针对OSG 1.3 的版本。OSG在3D 应用程序的层级中扮演着重要的角色。它作为中间件(middleware)为应用软件提供了各种高级渲染特性,IO,以及空间结构组织函数;而更低层次的OpenGL 硬件抽象层(HAL)实现了底层硬件显示的驱动。一直以来,OSG 都是以源代码作为可阅读的文档资料。OSG 的发布版本中包含了一些示例程序,用于介绍各种不同渲染效果的实现,以及OSG 与终端用户软件的集成方法。有相当部分的开发者可以通过这些示例程序,以及使用调试工具深入了解OSG 的核心,成长为熟练的OSG API 程序员。尽管根据以往的经验,源代码足可起到编程文档的作用,但是它仍然不能替代正式格式的编程文档。图形和表格是编程手册中常见的易于理解的教学工具,但是它们在源代码中几乎无法体现。正因为OSG 的迅速发展和愈发复杂的体系,对于它的新用户来说,在缺乏参考文档的情况下学习OSG 所需的时间也就越长,这是我们所不愿看到的。事实上,在这本书面世以前,由于编程文档的匮乏,一部分开发者已经对OSG 的成熟性和稳定性产生了疑问,怀疑它是否能胜任专业级应用程序的开发工作。2006 年中期,Don Burns 和Robert Osfield 认识到了编写OSG 书籍的重要性。Don 的客户之一,计算机图形系统开发公司(CGSD),要求编写一定量的OSG图书和文档。Don 将这一文档开发工作转交给Paul Martz,而Robert 则建议第一本OSG 的书籍应当是免费且通俗易懂的。因此,《OpenSceneGraph 快速入门指导》诞生了。这本书是一个简短的编程指南,它介绍了基本和核心的OSG API函数。它同时也是一系列计划出版的OSG 书籍的第一部,OSG 的文档将随着这个系列的发行而逐渐完善。《OpenSceneGraph 快速入门指导》的编写目的如下。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值