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

2024-04-10 21:58

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

osgUtil链接库

osgUtil库集合了许多用于场景图形处理和几何体修改的工具。osgUtil 库最知名之处可能就是其中一系列支持更新、拣选和绘制遍历的类。

交运算(Intersection)

当用户程序从需要进行图形对象拾取的用户那里接收到事件输入时,可以使用以下的类,获得场景图形中被拾取部分的信息。
Intersector:Intersector 是一个纯虚类,它定义了相交测试的接口。osgUtil库从Intersection 继承了多个类,适用于各种类型的几何体(线段,平面等)。执行相交测试时,应用程序将继承自Intersector 的某个类实例化,传递给IntersectionVisitor 的实例,并随后请求该实例返回数据以获取交运算的结果。

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

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

PolytopeIntersector:与LineSegmentIntersector 类似,该类用于检测由一系列平面构成的多面体的相交情况。当用户点击鼠标,希望拾取到鼠标位置附近的封闭多面体区域时,PolytopeIntersector 类尤其有用。

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

优化

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

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

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

几何体操作

许多3D 程序都需要对读入的几何体进行修改,以获得所需的性能和渲染效果。osgUtil 库包含的类支持一些通用的几何形体运算。
Simplifier:使用Simplifier 类减少Geometry 对象中几何体的数目,这有助于低细节层次的自动生成。

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

DelaunayTriangulator:正如其名称所示,这个类实现了Delaunay 三角网格化运算,根据一组顶点的集合生成一系列的三角形。

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

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

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

osgDB链接库

使用插件管理的架构,支持大量常见的2D图形和3D模型文件格式。负责维护插件的信息注册表,并负责检查将要被载入的OSG插件接口的合法性。

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

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

osgViewer链接库

osgViewer 库定义了一些视口类,因而可以将OSG 集成到许多视窗设计工具中,包括AGL/CGL,FLTK,Fox,MFC,Qt,SDL,Win32,WxWindows,以及X11。这些视口类支持单窗口/单视口的程序,也支持使用多个视口和渲染器面的多线程程序。每个视口类都可以提供对摄像机运动,事件处理,以及osgDB::DatabasePager 的支持。osgViewer 库包含了以下三个可能用到的视口类。

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

Viewer:Viewer 类用于管理多个同步摄像机,他们将从多个方向渲染单一的视口。根据底层图形系统的能力,Viewer 可以创建一个或多个自己的窗口以及图形上下文,因此使用单一视口的程序也可以在单显示或者多显示的系统上运行。

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

osgViewer 库还包括一些额外的类,用以支持显示统计,窗口提取和场景的处理工作。

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

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



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

相关文章

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

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

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