OSG入门_场景图形与OpenSceneGraph概述02

2024-04-10 21:58

本文主要是介绍OSG入门_场景图形与OpenSceneGraph概述02,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NodeKits

NodeKits 扩展了Nodes,Drawables 和StateAttributes 的概念,也可以看作是OSG 内核中osg 库的一种扩展。NodeKits 的意义远大于对OSG 类的继承,事实上它还能够提供对.osg 的封装(一种支持对.osg 文件进行读写的OSG 插件)。总之,NodeKit 由两部分组成:NodeKit 本身,以及针对.osg 的封装插件库。OSG 2.0版本包含有六种NodeKits。

如下图为OSG3.4.0源码结构:
OSG3.4.0源码结构
osgFX 库:此类NodeKit 提供了额外的场景图形节点,以便于特效的渲染,例如异向光照(anisotropic lighting),凹凸贴图,卡通着色等。

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

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

osgText 库:此类NodeKit 提供了向场景中添加文字的得力工具,可以完全支持TrueType 字体。

osgTerrain 库:此类NodeKit 提供了渲染高度场数据的能力。

osgShadow 库:此类NodeKit 提供了支持阴影渲染的框架结构。

OSG插件

OSG 的核心库提供了针对多种2D 图形和3D 模型文件格式的I/O 支持。osgDB::Registry 可以自动管理插件链接库。只要提供的插件确实可用,Registry就可以找到并使用它,应用程序只需调用相应的函数来读取和写入数据文件即可。

osg 库允许用户程序采用“节点到节点”(node-by-node)的方式直接建立场景图形。相反的,OSG 插件允许用户程序仅仅通过编写几行代码就能够从磁盘中调用整个场景图形,或者调用部分的场景图形,然后应用程序可以将其列入整个场景图形系统中去。

OSG 的2.0 版本支持大量常用的2D 图形文件格式, 包括.bmp,.dds,.gif,.jpeg,.pic,.png,.rgb,.tga 和.tiff。OSG 还支持用于读取电影文件的QuickTime 插件,并有专门的插件用于读取FreeType 类型的字体。

OSG 广泛支持各种3D 模型文件格式,其中包括3D Studio Max(.3ds),Alias Wavefront(.obj),Carbon Graphics’ Geo(.geo),Collada(.dae),ESRI Shapefile (.shp),OpenFlight(.flt),Quake(.md2)和Terrex TerraPage(.txp)等常见格式。

除上述标准格式以外,OSG 还定义了自身的文件格式。其中,.osg 格式是场景图形的另一种ASCII 文本描述格式,用户可以使用文本编辑器对其进行编辑和修改;而.ive 格式则是一种二进制格式,经过优化之后它更适合于迅速读取。除2D 图形和3D 模型文件以外,OSG 插件还支持对压缩文件和文件集的I/O操作,OSG 目前支持的压缩文件格式有常见的.tgz 和.zip,以及OSG 特有的.osga格式。

此外,OSG 还包含了一组名为“PseudoLoader”的插件,以提供除简单文件读取之外更多的功能:
缩放、旋转和平移:此类PseudoLoader 读取文件并在已读入场景图形根节点上添加一个Transform 节点,并指定放缩、旋转和平移属性的值以配置Transform。
图标:图标类PseudoLoader 允许在已读入3D 场景之上显示HUD(抬头显示)样式的图片文件。

互操作性

为了确保OSG 可以在更多环境中运行,OSG 提供了一个语言无关的、可供运行时访问的接口。

osgIntrospection 库允许用户软件使用反射式和自省式的编程范式与OSG 进行交互。应用程序或其它软件可以使用osgIntrospection 库和方法迭代OSG 的类型,枚举量和方法,并且无需了解OSG 编译和链接时的具体过程,即可调用这些方法。

Smalltalk 和Objective-C 等语言包括了内建的反射式和自省式支持,但使用C++的软件开发人员通常无法运用这些特性,因为C++并未保留必要的元数据(metadata)。为了弥补C++的这一不足,OSG 提供了一系列自动生成的、从OSG源代码创建的封装库,用户程序不需要与这些OSG 的封装库直接交互,它们将完全由osgIntrospection 进行管理。作为osgIntrospection 及其封装的结果,许多语言如Java,Tcl,Lua 和Python,都可以与OSG 进行交互。

程序与示例

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

如下图为OSG3.4.0的“applications”的源码结构:
applications
osgarchive:用于向.osga 文件包中添加新的文件。也可以用这个程序实现包的分解和列表。

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

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

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

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

OSG入门基础_00 01 02概况图:
这里写图片描述

这篇关于OSG入门_场景图形与OpenSceneGraph概述02的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/892262

相关文章

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到