当前位置: 首页 > article >正文

3D可视化引擎HOOPS Luminate场景图详解:形状的创建、销毁与管理

本文详细介绍了HOOPS Luminate API的场景图部分。场景图是定义要显示的2D或3D世界的关键元素。在本文的过程中,我们将回顾HOOPS Luminate场景图的所有不同对象,并了解如何将它们组织在一起。

HOOPS Luminate场景图对象分为两类:

  • 形状:这些是要显示的图形实体。形状可以由所有常见的图形实体组成:三角形、线条、点、文本、灯光……
  • 原子属性:这些属性定义了给定场景图在屏幕上的显示方式。其中,我们会发现边界球、层集、矩阵……

一、什么是场景图?

HOOPS Luminate场景图是形状图。更准确地说,它是一个有向无环图。我们经常使用“DAG”首字母缩略词来指代它。有向无环图定义:

  • 形状之间的父子关系
  • 它不支持循环。因此,该图有一个根元素和叶子元素
  • 引用/实例关系:给定形状可能有多个父级

下图说明了这些属性:

我们确定实例形状在内存中存储一次(引用),并且根据从场景图根到形状本身(实例)的不同路径进行多次可视化。

有向无环图(DAG)的属性

二、创建和销毁形状

// Sample creation of a mesh shape in 'shape':
RED::Object* shape = RED::Factory::CreateInstance( CID_REDMeshShape );
// Sample destruction of a shape object 'shape':
RED::Object* resmgr = RED::Factory::CreateInstance( CID_REDResourceManager );
RED::IResourceManager* iresmgr = resmgr->As< RED::IResourceManager >();

所有HOOPS Luminate形状均使用适当的类标识符通过该方法创建RED::Factory::CreateInstance。形状类标识符定义如下:

  • 变换形状:CID_REDTransformShape;详情请参阅变换形状
  • 三角形网格形状:CID_REDMeshShape;详情请参阅网格形状
  • 线形:CID_REDLineShape;详情请参阅线形
  • 点形:CID_REDPointShape;详情请参阅点形
  • 文本形状:CID_REDTextShape;详情请参阅文本形状
  • 体积形状:CID_REDVolumeShape;详情请参阅体积形状
  • 光源形状:CID_REDLightShape;详情请参阅“光源形状”

形状的销毁使用 执行RED::Factory::DeleteInstance。形状的销毁在用于执行销毁命令的事务结束时生效

重要的是要知道,变换形状的破坏会导致其所有未链接到未被破坏的其他形状的子形状的破坏,如下所示:

场景图破坏场景

在此示例中,Shape#A的破坏引发了其专有场景图的破坏:这是Shape#A的所有递归子级的集合,这些子级没有非#A子级的祖先。在此示例中,它由形状#C、#D和#E组成。在第二个破坏示例中,Shape#D被破坏,我们看到只有Shape#D会被破坏。Shape#E不包含在破坏范围内,因为Shape#E是Shape#C的子级,而Shape#C不会被破坏。

必须考虑这些行为以避免重复销毁形状。如果使用删除形状两次RED::Factory::DeleteInstance(直接删除或在形状树销毁后删除),RED_SCG_SHAPE_ALREADY_DESTROYED则将返回。

另一个重点是,视点的破坏会导致视点的根形状的破坏(参见RED::IViewpoint::GetRootShape),并因此破坏该视点下方的所有场景图,除非存在指向其他场景图的父链接。

三、场景图中的形状类型

HOOPS Luminate的网格、线和点显示形状只是原子的。它们分别加载三角形、线段(或条带)和点。除了平面多边形外,HOOPS Luminate没有内置的镶嵌服务。HOOPS Luminate数据通常来自外部建模软件,这些软件提供用于填充形状的数据数组。每个形状都是RED::Object通过RED::Factory::CreateInstance使用适当的CID并实现以下接口创建的:

HOOPS Luminate中还有其他几种形状类型可供选择:

变换形状对于定义对象的相对位置是必不可少的。它们实际上通过存储的变换矩阵定义了对象的实际位置。文本是2D或3D基元,用于在应用程序内显示各种类型的文本。需要光源来为场景图中的几何图形提供一些照明,体积效果是相当高级的对象,用于在高质量图像渲染中定义气体效果。

四、场景图属性

形状存储了多个属性,这些属性指示HOOPS Luminate如何显示形状,或者如何将外部应用程序数据链接到形状。属性是独立的,也可以沿着场景图DAG定义的层次结构继承。这些属性的详细信息及其使用方式如下:场景图中的形状属性。


http://www.kler.cn/a/406965.html

相关文章:

  • 「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型
  • C++格式化输入输出【练习版】
  • 小鹏汽车智慧材料数据库系统项目总成数据同步
  • 【linux】插入新硬盘如何配置:格式化、分区、自动挂载(Ubuntu)
  • 阿里系 acw_sc__v3 某教学网站
  • 【强化学习的数学原理】第02课-贝尔曼公式-笔记
  • python安装包中的一些问题(一):conda list 已经安装的包为啥在spyder pip list中没有?
  • 从监控异常发现网络安全
  • Exploring Prompt Engineering: A Systematic Review with SWOT Analysis
  • 本地安装YAPI
  • 基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
  • go 接口类型断言
  • 高精度计算题目合集
  • 【报错】C++未定义的引用
  • vscode remote-ssh直连docker容器
  • FastGPT 和 DiffYAI 算不算ANGENT
  • pubspec.yaml
  • 秋招面试基础总结,Java八股文基础(串联知识),四万字大全
  • 信息安全体系文件考试(2024)全员
  • 生成身份证校验位
  • flink学习(4)——方法的使用—对流的处理(keyBy,Reduce)
  • Vue3 源码解析(三):静态提升
  • css样式覆盖
  • vue3 uniapp 扫普通链接或二维码打开小程序并获取携带参数
  • 什么是C++中的模板特化和偏特化?
  • 嵌入式:Flash的分类以及Jlink/J-flash的编程支持