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

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就