参考书籍《OpenSceneGraph三维渲染引擎设计与实践》,作者王锐,钱学雷

一、场景图形

1.概念

场景图形(Scene Graph)是一种经常用于计算机游戏和图形学相关软件的数据结构设计方法。

2.应用

典型的应用了场景图形概念的软件系统包括AutoCAD、Java3D、CorelDRAW以及OSG。

3.场景图形实现

简单的场景图形实现是使用数组或者链表,并按照固定的顺序依次绘制或操作这些节点;

大规模场景管理的场景图形往往使用图结构(Graph Structure)或树结构(Tree Structure)来组成一组节点集。

目前多数渲染引擎均采用一种自顶向下、分层的树状结构来组织空间数据集,以提升渲染的效率。

二、三维渲染引擎

1.概念

简单来说,三维渲染引擎就是为了实现三维场景图形的结构管理和绘制而提供的一系列API的集合。它应当包含至少两个层次:构建层(Construction Layer)和交互层(Interaction  Layer),前者提供了在三维空间中设计和完成所需模型的工具集,或者从外部加载复杂模型的数据接口;后者则提供对三维空间及所含模型的装配、渲染、优化和控制功能。

2.分类

三维渲染引擎分为低阶引擎和高阶引擎。

(1)低阶引擎

OpenGL和DirectX均为低阶引擎。

(2)高阶引擎

不仅支持面向对象的开发方式,并且以场景图形为基础。

3.主流渲染引擎

PHIGS(Programmer's Hierachical Interactive Graphics System)、OpenInventor、OpenGL Performer、Cystal Space、Java3D、Unreal、OpenSG、OGRE3D、Irrlicht、Vega Prime、OpenSceneGraph

其中,

OGRE3D(Object-Oriented Graphics Rendering Engine)是一个面向场景的、灵活的三维渲染引擎,诞生于1999年,至今其开发团队任然十分活跃。OGRE 3D主要针对游戏开发,可以使用OpenGL或DirectX作为底层支持,并支持多种高级特性。OGRE基于有改动的LGPL协议发布,并实现了场景八叉树、BSP树、CLOD以及分页调度的机制,可以运行于Linux、Mac OS X和Window系统中。

三、OSG

1.概念

OpenSceneGraph是一个高性能开源三维图形引擎,基于修改的LGPL协议(OSGPL)免费发布,广泛应用于虚拟仿真、虚拟现实、科学和工程可视化等领域。它以OpenGL为底层平台,使用C++编写而成,可运行于Windows、UNIX/linux、Mac OS X、IRIX、Solaris、HP-UX、AIX和FreeBSD等操作系统。其功能特性涵盖了大规模场景的分页支持,多线程、多显示的渲染,粒子系统与阴影,各种文件格式的支持,以及对于Java、Perl、Python等语言的封装。

2.优势与不足

OSG引擎由一系列图形学相关的功能模块组成,主要为图形图像应用程序的开发提供场景管理和图形渲染优化的功能。它使用可移植的ANSI C++编写,并使用已成为工业标准为OpenGL底层渲染API。OSG具有跨平台的特性,可以运行在大多数类型的操作系统上,并使用抽象层的概念,使OSG的函数接口可以独立于用户的本地操作系统使用;但是OSG也包含了针对某些平台相关的支持代码。

OSG遵循开源协议发布,其用户许可方式是一种修改过的GNU宽通用公共许可证(GNU Lesser General Public License,LGPL),称为OSGPL。

OSG主要具备以下优势:

(1)快速开发。OSG场景图形内封装了几乎全部的OpenGL底层接口,并随时支持最新的扩展特性。应用程序的开发者可以将中心放在三维程序开发的实质性内容以及与各种场景对象交互的方法上,而不再过多关注底层的代码。

(2)高品质。OSG经历了许多开发成员的反复检查、测试和改善,参与OSG核心代码开发并有贡献的人数很多。

(3)高性能。OSG的核心代码支持多种场景的裁剪技术、细节层次节点、渲染状态排序、顶点数组、显示列表、VBO、PBO、FBO、OpenGL着色器语言等;以及文字显示,粒子系统,阴影系统;雨、雪、火焰、烟雾等特效模拟,场景的东塔调度,线程渲染等各种机制。它们共同使OSG逐渐成为一个高性能的三维渲染引擎。

(4)高质量代码

(5)可扩展性。基于场景图形的扩展思想,OSG提供了强大的可扩展能力,包括各种类型的扩展节点(NodeKits,节点工具箱)、扩展渲染属性、扩展回调、扩展交互事件处理器等,为用户的程序开发提供了灵活的支持能力。

(6)可移植性。OSG提供了Windows、UNIX、Linux、Mac OS X、IRIX、Solaris、HP-UX、AIX和FreeBSD系统的移植能力,基于OSG开发的程序只要经过一次编写,就可以编译并运行在这些平台上,不需要关心更多的代码移植的细节。

(7)低费用。开源意味着免费,使用和发布基于OSG开发的程序和软件是不需要额外许可费用的。

(8)没有知识产权问题。对于开源且易于所有人阅读的代码而言,不存在侵犯软件专利的可能性。

不足:参考文档较少、代码风格不统一、部分功能的实现过于冗杂、无法应用于实践等。

3.组成结构

OSG的功能类采用“命名空间+类名称”的形式来命名。命名空间方式为第一个单词小写,后继单词首字母大写,如osg Util;

类的名称规则采用每个单词首字母大写的组合形式,如MatrixTransform

功能类的成员函数使用小写字母开头,之后每个单词的首字母大写,例setMatrix()

OSG引擎的组成部分包括一系列动态链接库(.dll/so)、插件(.dll/.so)、供开发者使用的静态链接库(.lib/.a)、头文件,以及可执行的工具程序和实例。

按其作用可分为:

OSG核心库:提供了基本场景图形和渲染功能,以及3D图形程序所需的某些特定功能实现。其核心库有:

osg库,osgDB库,osgUtil库,osgGA库,osgViewer库

节点扩展工具箱(NodeKits):扩展了核心OSG场景图形节点类的功能,以提供高级节点类型和渲染特效。节点扩展库包括:

osgAnimation,osgFX,osgManipulator,osgParticle,osgShadow,osgSim,osgTerrain,osgText,osgVolume,osgWidget

OSG文件读写插件:其中包括2D图像、3D模型文件和其他类型文件的读写功能插件,可以任意扩展或删减

内省库:提供了OSG与其他开发环境集成的功能

工具程序和示例集:提供了实用的工具和超过100个有关OSG使用和功能实验的例子

OSG三维渲染引擎之OSG简介相关推荐

  1. OSG三维渲染引擎编程学习(全系列开展OSG学习)

    目录 第一章:OpenSceneGraph介绍 第二章:OSG数学基础 第三章:OSG场景组织 第四章:OSG几何体绘制 第五章:OSG场景渲染 第六章:OSG场景工作机制 第七章:OSG场景图形交互 ...

  2. OSG三维渲染引擎编程学习之十七:“第二章:OSG数学基础” 之 “2.7 世界坐标系、物体坐标系、摄像机坐标系”

    第二章 OSG数学基础 OSG是一个优秀的三维渲染引擎,三维渲染涉及到大量的3D数学知识.3D数学是一门和计算机几何相关的科学,研究怎样用数值的方法来解决几何问题,因此,掌握并灵活运用3D数字知识是O ...

  3. OSG三维渲染引擎编程指南(详读)

    一.OpenSceneGraph发展及应用 二.OSG及osgEarth的编译及安装 三.OSG与数学之间扯不断理还乱的关系 四.场景的组织及渲染 1.Node 2.Geode 2.1 billBoa ...

  4. OSG三维渲染引擎编程学习之三十六:“第四章:OSG几何体绘制” 之 “4.1 OSG基础绘图类”

    目录 第四章 OSG几何体绘制 4.1 OSG基础绘图类 4.1.1 Drawable可绘制类 4.1.2 PrimitiveSet图元集 第四章 OSG几何体绘制

  5. OSG三维渲染引擎编程学习之一:“第一章:OSG介绍” 之 “1.1 OSG简介”

    目录 第一章 OSG介绍 1.1 OSG简介 第一章 OSG介绍 通过本章的学习,全面了解OSG的诞生.历史.发展及模块组成.通过获取.安装.编译第三方库及OSG,建立基于OSG的基础编程环境.为便于 ...

  6. OSG三维渲染引擎编程学习之五:“第一章:OSG介绍” 之 “1.5 OSG模块”

    目录 第一章 OSG介绍 1.5 OSG模块 1.5.1 核心库(Core) 1.5.2 工具库(NodeKit) 1.5.3 插件库(Plugins)

  7. [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述

    1 .引言 随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真 实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层 图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开 ...

  8. 谈谈GIS三维渲染引擎

    minemap:是我们公司的产品,主要以earth的形态展示,支持矢量切片+倾斜数据(这一点我个人认为是它最大的优点,即兼容了矢量切片精美地图又兼容倾斜数据,目前倾斜数据采用的3dtile格式),目前 ...

  9. GIS三维渲染引擎 到底有什么区别

    minemap:主要以earth的形态展示,支持矢量切片+倾斜数据(这一点我个人认为是它最大的优点,即兼容了矢量切片精美地图又兼容倾斜数据,目前倾斜数据采用的3dtile格式),目前正在重构引擎架构, ...

最新文章

  1. 顺序表应用7:最大子段和之分治递归法
  2. 阿拉伯数字转换英文数字表示算法解析及其实现
  3. 组装r730服务器,戴尔poweredge r730服务器配置及系统安装详解教程
  4. android修改对话框大小设置,android – 如何更改对话框首选项消息的文本大小?...
  5. Maven 项目添加jetty 插件
  6. 微分方程传染病模型之指数模型-SI模型-SIS模型-SIR模型
  7. 【老生谈算法】matlab实现追赶法算法——追赶法算法
  8. Keil C51 Code Banking
  9. gearman:从安装到python API测试
  10. 通达信版弘历软件指标_通达信仿弘历收费指标
  11. 静无止静,澎湃聆听——飞利浦T4507降噪真无线耳机上市
  12. 使用nginx模拟反向代理
  13. TOJ 1335 优先队列
  14. stylecloud ,wordcloud 库学习及使用例子
  15. 网页播放视频解决代码(来自百度知道)
  16. 使用request.get获取网页源码
  17. 12 张图看微软走过的 40 年
  18. (强烈推荐)移动端音视频从零到上手(上)
  19. Css之scoped (有作用域的 CSS)
  20. AlphaGo 的算法和技术分析

热门文章

  1. python读取word文档中的换行_python - 读取没有换行符的文件
  2. Nginx篇06-Sendfile指令及其原理
  3. 02-Bootstrap基本性组件
  4. 修改Maven镜像仓库为阿里云Maven仓库,下载如有神
  5. java 火车票查询系统_Java火车票查询系统
  6. append函数的用法
  7. 微服务架构和SOA架构的区别
  8. 温度传感器挂接到树莓派
  9. 【ML-SVM案例学习】003梯度下降之拉格朗日乘子法
  10. 地理位置服务——百度地图API