`
nlslzf
  • 浏览: 1048675 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

OpenSceneGraph概述

 
阅读更多

一. OSG组件

   OSG 运行时文件由一系列动态链接库(或共享对象)和可执行文件组成。这些链接库可分为以下五大类: 
    1. OSG 核心库。
    2. NodeKits。
    3. OSG 插件。
    4. 互操作库。
    5. 不断扩展中的程序和示例集。
二. OSG核心库

    OSG 核心库提供了用于场景图形操作的核心场景图形功能、类和方法;主要包含一下四个链接库:

    1. osg库:osg 库包含了用于构建场景图形的场景图形节点类,用作向量和矩阵运算的类,几何体类,以及用于描述和管理渲染状态的类。

    2. osgUtil库:osg工具库包括的类和函数,可以用于场景图形及其内容的操作,场景图形数据统计和优化,以及渲染器的创建。还包括几何操作的类。

    3. osgDB库:包括了建立和渲染3D数据库的类和函数。其中包括用于2D和3D文件读写的OSG插件类的注册表。

    4. osgViewer库:包括场景中视口及可视化内容的管理类。

 

osg链接库:

一. 场景图形类

    场景图形类用于辅助场景图形的构建。所有场景图形类都继承自osg::Node。从概念上分,根节点、组节点、叶节点。

     1. Node:所有节点的基类。包括场景图形的遍历(Traverse)、挑选(Cull)、程序回调(Callback )以及状态管理。

     2. Group:所有可分支节点的基类。是场景图形组织结构的关键类。

     3. Geode:即Geometry Node,相当于OSG中的叶节点。没有子节点但包括osg::Drawable对象,Drawable对象中用于存放要被渲染的几何体。

  4. LOD:层次节点类,根据观察点与图像子节点的距离选择显示子节点。通常使用它来创建场景中物体的多个显示层级。

  5. MatrixTransform:包含用于实施子节点几何体空间转换的矩阵,包括旋转、平移、缩放、倾斜、映射等。

  6. Switch:用布尔掩码来允许或禁止子节点的运作。

  7. ……………

二.  几何体类

  Geode类是OSG的叶节点,包含了渲染用的几何数据。常见的可以用于Geode中几何数据的存储的类有:

  1. Drawable:是所有存储几何数据信息类的基类,纯基类。

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

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

  4. Vector类:Vec2、Vec3等。提供预定义的二三四维向量。用类指定顶点、颜色、法线和纹理坐标等信息。

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

三. 状态管理类

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

  1. SateSet类:保存一组定义状态数据(模式和属性)。场景中任何osg::Node都可以与一个StateSet相关联。

  2. Modes(模式):与OpenGL中glEnable()和glDisable()相似。用于打开或关闭OpenGL 固定功能(fixed-function)的渲染管道,例如灯光,混合和雾效。方法   osg::StateSet::setMode()在StateSet 中保存一个模式信息。

  3. Attibutes(属性):使用属性来指定状态参数,例如混和函数,材质属性,雾颜色等。方法osg::StateSet::setAttribute()在StateSet 中保存属性信息。

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

  5. 继承标志:OSG 提供了一些标志量,用于控制场景图形遍历中的状态值。缺省情况下,子节点中的状态集合将重载父节点的状态集合。

四.其它实用类

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

  2. ref_ptr<>: 模板类ref_ptr<>为其模板内容定义了一个智能指针,模板内容必须继承自Referenced 类。

  3. Object:纯虚类Object 是OSG 中一切需要I/O 支持,拷贝和引用计数的对象的基类。

  4. Notify:osg 库提供了一系列控制调试,警告和错误输出的函数。

 

osgUtil链接库
一. 交运算(Intersection )

  一般来说,3D 程序需要为用户提供一些实现交互和选择的功能,比如图形对象的拾取。通过提供大量用于场景图形交运算的类,osgUtil 库可以高效地支持拾取操作。

  1. Intersector:纯虚类,定义相交测试的接口。

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

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

  4. PolytopeIntersector:继承自Intersector 类,用于检测由一系列平面构成的多面体的相交情况。

  5. PlaneIntersector:与LineSegmentIntersector 类似,这个类用于检测由一系列平面构成的平面的相交情况。

二。优化

  osgUtil 库包含的类可以遍历并修改场景图形,以实现渲染的优化和收集场景统计信息的目的。

  1. Optimizer:Optimizer 类用于优化场景图形。其属性使用一组枚举标志进行控制,每一个标志都表示一种特定的优化方式。例如,FLATTEN_STATIC_TRANSFORMS 使用非动态Transform 节点来变换几何体,通过清除对OpenGL的model-view 矩阵堆栈的修改,实现场景的渲染优化。

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

三。几何体操作

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

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

  2. Tessllator:Tessellator 类可根据一组顶点的列表,生成由前述顶点列表所描述的多边形,即一个osg::PrimitiveSet。

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

  4. TriStripVisitor:TriStripVisitor 类可遍历场景图形并将多边形图元转换成三角形和四边形条带。  

  5. SmoothingVisitor:SmoothingVisitor 类可生成顶点法线,也就是所有共享此顶点的面的法线平均值。

  6. 纹理贴图生成:osgUtil 库包含了帮助建立反射贴图,中途向量(half-way vector)贴图,以及高光贴图的代码。

 

osgViewer 链接库

   osgViewer 库定义了一些视口类,因而可以将OSG 集成到许多视窗设计工具中。支持单窗口/单视口的程序,也支持使用多个视口和渲染器的多线程程序。

  1. SimpleViewer:该类负责管理单一场景图形中的单一视口。使用SimpleViewer 时,应用程序必须创建一个窗口并设置当前的图形上下文(graphics context)。

  2. Viewer:用于管理多个同步摄像机,他们将从多个方向渲染单一的视口。

  3. CompositeViewer:CompositeViewer 类支持同一场景的多个视口,也支持不同场景的多个摄像机。如果指定各个视口的渲染顺序,用户就可以将某一次渲染的结果传递给别的视口。CompositeViewer 可以用来创建抬头数字显示(HUD),预渲染纹理(prerender textures),也可以用于在单一视口中显示多个视图。

 

NodeKits  

  NodeKits 扩展了Nodes,Drawables 和StateAttributes 的概念,也可以看作是OSG 内核中osg 库的一种扩展。

  1. osgFX库:提供了额外的场景图形节点,以便于特效的渲染,例如异向光照(anisotropic lighting),凹凸贴图,卡通着色等。

  2. osgParticle库:提供了基于粒子的渲染特效,如爆炸、火焰、烟雾等。

  3. osgSim库:提供了仿真系统中以及渲染OpenFlight 数据库所需的特殊渲染功能,例如地形高程图,光点节点,DOF 变换节点等。

  4. osgTerrain库:提供了渲染高度场数据的能力。

  5. osgShadow库:提供了支持阴影渲染的框架结构。

 

程序与示例

  OSG 发行版包含了五个常用的OSG 工具程序,它们对于调试和其它基于OSG 的软件开发均十分有益。

  1. osgarchive:这个程序用于向.osga 文件包中添加新的文件。也可以用这个程序实现包的分解和列表。

  2. osgconv:这个程序用于转换文件格式。尤其有用的是,它可以将任意文件格式转换为经过优化的.ive 格式。

  3. osgdem:这个程序用于将高程图等高度数据及图像数据转换为分页的地形数据库。

  4. osgversion:这个程序将当前OSG 版本以及一些记录了OSG 源代码改动情况和贡献者信息送入std::cout。

  5. osgviewer:这是一个灵活而强大的OSG 场景及模型浏览器。

分享到:
评论

相关推荐

    OpenSceneGraph三维渲染引擎编程指南.pdf-part2

    第1章 OpenSceneGraph概述 1.1 OpenSceneGraph简介 1.1.1 什么是OpenSceneGraph 1.1.2 OpenSceneGraph的历史和发展 1.1.3 OSG中国 1.1.4 OSG组成模块 1.2 开发的预备知识 1.3 OSG的安装及编译 1.3.1 OSG的...

    OpenSceneGraph三维渲染引擎编程指南.pdf-part1

    第1章 OpenSceneGraph概述 1.1 OpenSceneGraph简介 1.1.1 什么是OpenSceneGraph 1.1.2 OpenSceneGraph的历史和发展 1.1.3 OSG中国 1.1.4 OSG组成模块 1.2 开发的预备知识 1.3 OSG的安装及编译 1.3.1 OSG的...

    OpenSceneGraph-3.6.5-VC2019-64-Release.7z

    1. **OpenSceneGraph概述**:OpenSceneGraph (OSG) 是一个高性能的C++图形API,它构建在OpenGL之上,用于创建复杂的3D图形应用程序。该库提供了一个灵活的节点树结构,允许开发者以层次化的方式组织3D模型和场景。 ...

    OpenSceneGraph三维渲染引擎设计与实践_source源码

    1. **OpenSceneGraph概述** OpenSceneGraph是一个高性能的3D图形API,基于OpenGL标准,提供了丰富的功能来构建复杂的3D场景。它包括图形渲染、几何处理、动画系统、网络通信等多个方面的功能,广泛应用于科学可视化...

    OpenSceneGraph.3.0.Beginners.Guide.pdf

    #### 一、OpenSceneGraph概述 **OpenSceneGraph (OSG)** 是一款功能强大的开源三维图形库,广泛应用于游戏开发、虚拟现实(VR)、增强现实(AR)以及各种专业可视化软件中。它以其高度灵活的场景图架构、强大的性能...

    openscenegraph 0.9.7

    1. **OpenSceneGraph 概述** OpenSceneGraph (OSG) 是一个基于OpenGL的C++库,它提供了一个高级的图形编程框架,支持多种3D图形特性,如阴影、体积渲染、纹理映射、多视口、粒子系统等。这个0.9.7版本是一个较早的...

    osg.rar_OpenSceneGraph_osg_osg chm

    1. **OpenSceneGraph概述** OpenSceneGraph是一个基于OpenGL的C++库,提供了丰富的3D图形功能,如场景图管理、高级渲染技术、动画系统以及交互式应用开发工具。它的设计目标是提高开发者的效率,通过提供高级抽象和...

    OpenSceneGraph_Quick_Start_Guide_中文版

    #### 一、OpenSceneGraph 概述与历史 OpenSceneGraph(简称OSG)是一种高性能、跨平台的开放源码三维图形库,广泛应用于游戏开发、虚拟现实系统、科学可视化等领域。本书旨在为初学者提供一个全面了解OSG的起点,并...

    osgQt.zip

    一、OpenSceneGraph概述 OpenSceneGraph(osg)是一个高性能的图形库,它基于OpenGL标准,支持硬件加速,提供了丰富的3D图形特性,包括光照、纹理、动画、粒子系统、视锥体剔除等。osg的核心是Scene Graph,这是一...

    OpenSceneGraph 3.0 Beginners Guide

    #### 二、书籍概述 《OpenSceneGraph 3.0 Beginner's Guide》是一本面向初学者和中级用户的指南书籍,旨在帮助读者快速掌握OSG的基本用法和高级技巧。本书不仅涵盖了OSG的基础知识,还深入介绍了如何利用OSG开发高...

    OpenSceneGraph三维渲染引擎设计与实践

    OpenSceneGraph(简称OSG)是一个高级三维图形API,基于OpenGL工业标准构建,它不仅是一个高性能的跨平台渲染引擎,而且还提供了许多其他3D应用程序中常见的功能,如2D/3D文件加载器、纹理映射字体支持、细节层次...

    王锐的《OpenSceneGraph 3.0 Beginner's Guide》中文翻译版,个人读了翻译的很不错!值得推荐

    ### OpenSceneGraph 3.0 Beginner's Guide 中文翻译版知识点概述 #### 一、OpenSceneGraph 引擎介绍 **OpenSceneGraph (OSG)** 是一款强大的、开放源码的三维图形引擎,专为高性能的图形开发设计,特别是在3D程序...

    OpenSceneGraph基本渲染理论.pdf

    ### OpenSceneGraph基本渲染理论知识点概述 #### 一、OpenSceneGraph (OSG) 基础 **1.1 什么是场景图** 场景图是一种用于组织和管理三维图形数据的结构,它采用非循环图的形式来表示场景中的对象及其相互关系。在...

Global site tag (gtag.js) - Google Analytics