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

相关文章

SQL Server 中的表进行行转列场景示例

《SQLServer中的表进行行转列场景示例》本文详细介绍了SQLServer行转列(Pivot)的三种常用写法,包括固定列名、条件聚合和动态列名,文章还提供了实际示例、动态列数处理、性能优化建议... 目录一、常见场景示例二、写法 1:PIVOT(固定列名)三、写法 2:条件聚合(CASE WHEN)四、

Java中的CompletableFuture核心用法和常见场景

《Java中的CompletableFuture核心用法和常见场景》CompletableFuture是Java8引入的强大的异步编程工具,支持链式异步编程、组合、异常处理和回调,介绍其核心用法,通过... 目录1、引言2. 基本概念3. 创建 CompletableFuture3.1. 手动创建3.2.

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

SpringBoot实现图形验证码的示例代码

《SpringBoot实现图形验证码的示例代码》验证码的实现方式有很多,可以由前端实现,也可以由后端进行实现,也有很多的插件和工具包可以使用,在这里,我们使用Hutool提供的小工具实现,本文介绍Sp... 目录项目创建前端代码实现约定前后端交互接口需求分析接口定义Hutool工具实现服务器端代码引入依赖获

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

使用Python在PDF中绘制多种图形的操作示例

《使用Python在PDF中绘制多种图形的操作示例》在进行PDF自动化处理时,人们往往首先想到的是文本生成、图片嵌入或表格绘制等常规需求,然而在许多实际业务场景中,能够在PDF中灵活绘制图形同样至关重... 目录1. 环境准备2. 创建 PDF 文档与页面3. 在 PDF 中绘制不同类型的图形python

Java中接口和抽象类的异同以及具体的使用场景

《Java中接口和抽象类的异同以及具体的使用场景》文章主要介绍了Java中接口(Interface)和抽象类(AbstractClass)的区别和联系,包括相同点和不同点,以及它们在实际开发中的具体使... 目录一、接口和抽象类的 “相同点”二、接口和抽象类的 “核心区别”关键区别详解(避免踩坑)三、具体使

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC

MySQL索引踩坑合集从入门到精通

《MySQL索引踩坑合集从入门到精通》本文详细介绍了MySQL索引的使用,包括索引的类型、创建、使用、优化技巧及最佳实践,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录mysql索引完整教程:从入门到入土(附实战踩坑指南)一、索引是什么?为什么需要它?1.1 什么