HOOPS/MVO技术概述

news2024/11/17 7:47:28

更多参见:HOOPS学习笔记
MVO

1.引言

HOOPS/MVO是一个C++类库,位于HOOPS 3D图形系统(HOOPS/3DGS)之上。它有一个模型/视图/操作员架构,封装了各种HOOPS/3DGS数据结构和概念,并提供了一系列通用应用程序级逻辑。HOOPS/MVO使HOOPS/3DGS的关键功能更易访问,有助于全功能、高性能CAD/CAM/CAE应用程序的高效开发和快速原型制作。

2.model/view/operator架构

模型/视图/操作员(MVO)架构将图形信息与其表示和操作分离。模型表示数据,而视图对应于此信息的表示。运算符是一组涉及查询、创建、编辑和操作数据的操作。HOOPS/MVO通过以下三个主要类实现该体系结构:HBaseModel(模型)、HBaseView(视图)和HBaseOperator(运算符)。
在这里插入图片描述

该图说明了模型/视图/操作员体系结构中各个对象之间的关系。

3.HOOPS/MVO 和HOOPS/3DGS

在HOOPS/3DGS中,三维对象被组织为Segment,Segment包含几何体、属性和subSegment。通常,这些对象创建并存储在顶级段top level segment下,该top level segment称为"Include Library"。

在HOOPS/MVO中,HBaseModel类封装了Include Library中的模型。当应用程序逻辑需要构建场景时,它将首先在驱动程序段下创建一个新实例,该实例对应于驱动程序的实例。

HOOPS/MVO类HBaseView存储给定驱动程序实例的各种信息,协商和管理数据,如灯光、覆盖图、选择集和相机定位。

一旦显示了3D场景,最终用户可能希望旋转相机、高亮显示/选择对象以及修改或删除各种项目。HOOPS/MVO通过HBaseOperator类及其派生类促进这些操作。
在这里插入图片描述

该图说明了由HOOPS/MVO对象构建的HOOPS段结构

4.HOOPS/MVO类

当使用HOOPS/MVO框架构建应用程序时,必须在应用程序的初始化阶段创建并初始化HDB类的单个实例。一旦有了HDB对象,就可以开始创建模型、视图和操作符。HOOPS/MVO支持多个模型和多个视图。
在这里插入图片描述

该图说明了各种HOOPS/MVO类的关系。

4.1HBaseModel

在HDB类中,存储3D图形信息。要将信息加载到数据库中,可以使用HBaseModel。HBaseModel支持加载各种文件格式,并将模型信息存储在HOOPS/3DGS段树中,HOOPS/3DGS段树由HOOPS/3D GS包含库段表示。一旦信息进入数据库,您就可以继续使用HBaseModel来帮助管理3D对象。当您准备好保存对象信息时,HBaseModel还支持导出为多种格式。

4.2HBaseView

HBaseView类管理模型的表示。尽管一个HBaseModel对象可以有多个HBaseView实例,但每个HBaseView仅与一个HBbaseModel实例关联。在HOOPS/3DGS数据库中,HBaseView封装了驱动程序段driver segment的实例。驱动程序实例定义了与OpenGL2或DX11等设备的连接。当HBaseView初始化时,它会在驱动程序实例段下创建一个默认段结构,用于管理与HBaseModel的交互、场景的灯光、相机设置和窗口属性(如临时“'rubberband”图形)。
HBaseView是一个具有多种功能的多功能类。它处理模型数据的显示方式和时间。这包括Gouraud、Phong和线框等渲染模式。HBaseView还具有基于帧速率标准管理细节级别的功能。应用程序的响应能力和有效性可以与您如何使用HBaseView功能直接相关

4.3HBaseOperator

除了显示3D场景外,大多数应用程序允许最终用户与模型或视图交互或“操作”。在HOOPS/MVO中,HBaseOperator是一个抽象基类,它定义了处理用户输入和对模型或视图进行操作的接口。此类中定义的虚拟方法为将用户输入映射到交互逻辑提供了基础。在此框架中,对象从HBaseOperator派生,然后实现它选择的任何虚拟方法,以处理诸如鼠标移动或按键等事件。
HOOPS/MVO不仅在HBaseOperator类中提供了处理用户事件的框架,而且还提供了一组从HBaseOperators派生的预构建类,这些类处理广泛的交互。预制HOOPS/MVO操作员通常分为以下几类:

  • 摄影机操纵操作符用于平移、缩放或环绕摄影机。其中包括HOpCameraOrbit、HOpCamera Zoom和HOpCamerPan。

  • 用于在数据库中创建和插入对象的对象创建运算符。其中包括HOpCreateCircle、HOpCreateCylinder、HOpCCreateSphere和HOpCreateCuttingPlane。

  • 用于平移和旋转对象的对象操纵运算符。其中包括HOpObjectRotate、HOpObjectTranslate和HOpObjectAnnotation。

  • 用于拾取对象的选择运算符。这些包括HOpSelectPolygon和HOpSelectPolyline。

  • 用于在场景中创建注释的标记运算符。其中包括HOpMarkupAnnotate、HOpMarkup Circle和HOpMarkupMeasure。

FILE I/O架构

HOOPS/MVO通过文件I/O架构支持数据的导入和导出。该体系结构的核心是处理所有文件输入和输出模块的HIOManager类。HIOManager的实例是在HDB类初始化期间创建的。
在这里插入图片描述

该图显示了如何将文件加载到数据库中。
当文件导入HOOPS/MVO时,HBaseModel::Read将启动该过程。此函数要求HIOManager为文件找到正确的输入处理程序。搜索主要基于文件扩展名的比较。找到兼容的输入处理程序后,信息将写入段树的指定区域下的数据库中。数据的输出与数据的输入类似。

在这里插入图片描述

该图显示了如何导出数据库信息到文件中。

HOOPS/MVO文件I/O体系结构提供了各种预构建的输入/输出处理程序,支持多种文件格式。除了预构建的处理程序之外,文件I/O体系结构还支持自定义输入和输出处理程序。要构造新的输入处理程序,请创建一个从HInputHandler派生的新类,并实现read方法和register方法,该方法通知HIOManager输入处理程序支持的文件类型。可选地,输入处理程序还可以实现用于进度和错误报告以及创建日志文件的接口。创建新的输出处理程序与创建输入处理程序类似。

SELECTION

当向用户呈现3D场景时,更改视点后的自然倾向是选择场景中的项目。HOOPS/MVO提供创建、管理和操作选定对象的功能。对于给定视图,HSelectionSet管理所选项目。此类维护已标识为选定的HOOPS几何体或段“关键点”列表。将项目添加到选择集时,HSelectionSet会根据高亮显示模式高亮显示项目。目前,支持的高亮显示模式包括条件样式高亮显示、快速移动参考高亮显示和反向透明度。HSelectionSet可以轻松扩展到任何数量的复杂高亮模式和样式,这些模式和样式可能更适合您的应用程序。

要使用HSelectionSet,请创建对象的实例,然后将其与HBaseView的实例相关联。当操作员收到启动选择过程的鼠标或键事件时,它使用事件信息创建一组标准,以传递给HOOPS/3DGS计算选择功能。此方法返回一个项目列表,然后操作员使用该列表更新HSelectionSet对象。

在HOOPS/MVO中,有几个预构建的运算符反映了最常见的选择类型。第一个是HOpSelectArea,其选择标准是矩形区域。在鼠标左键按下事件期间,此操作符将鼠标位置记录为矩形中的第一个点。当鼠标指针在视图上拖动时,在场景上绘制一个橡皮筋矩形,允许用户可视化选择区域。操作员在鼠标左键向上事件期间记录选择区域的第二点和最后一点。与矩形相交的对象被标识为选定项。

另一个常用的选择运算符是HOpSelectArture,它对用户选择的点执行命中测试。在鼠标左键按下事件期间,操作员捕获指针的位置。如果某个几何图形位于该位置的选择范围内,则考虑选择该几何图形。

HOOPS/MVO还有另外两个预先构建的选择运算符。HOpSelectPolygon基于用户定义的多边形执行选择,而HOpSelectPolyline基于与多段线相交的项目执行选择。

动画

在用户可导航场景中显示高质量的3D模型可以是一种有效的可视化方法。然而,通过动画添加运动可以帮助传递更多信息。例如,显示活塞转动曲轴或装配线上机器人手臂运动的动画可以比静态场景传递更多信息。HOOPS/MVO提供了通过一组行为类创作类似动画的能力。

在HOOPS/MVO中,HBhvBehaviorManager类管理给定HBaseModel实例的所有行为类。您可以使用HBhvBehaviorManager中的方法创建和修改动画。对于给定的动画,可以添加任意数量的不同关键帧来更改目标对象的位置、方向或属性。通过组合不同对象的多个行为并同时播放它们,可以创建复杂的动画。此外,可以通过使用动作(如鼠标事件)来触发特定对象的行为,来构建高度交互的场景。

一旦创建了动画,HOOPS/MVO就可以像电影一样控制播放、暂停和回放。可以将动画保存到XML文件(.bhv)中,稍后再加载。动画也可以导出到AVI文件中,以便在其他播放器和网络上查看。

运用框架

根据应用程序的性质,HOOPS/MVO可以用于多种目的。首先,它可以用作应用程序的基础。由于HOOPS/MVO负责管理数据相关的常见、低级细节以及通过适当渠道路由用户事件,因此设计师和程序员可以专注于实现其特定于市场的功能需求。

在某些情况下,现有应用程序可能已经有了自己的框架。因为HOOPS/MVO是专门为HOOPS/3DGS构建的框架,所以它可以作为沙盒,用于在将新的和复杂的功能集成到应用程序之前快速原型化。因为在这种环境中,可以在相对较短的时间内设计、实现和测试新功能,所以可以将更多的时间用于微调性能和质量。

随着HOOPS/3DGS的每一个新版本,增加了越来越多的复杂功能。应用程序开发人员会发现,HOOPS/MVO是参考实现的宝贵存储库,不仅用于选择和相机操纵等基本功能,还用于冲突检测和动画等更复杂的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【无人机】基于粒子群优化干扰受限下无人机群辅助网络附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

Xception --tensorflow2.x

简介 Xception和SqueezeNet一样,是一种降低参数量的轻量级神经网络,它主要使用了 深度分离卷积(Depthwise separable convolution)结构,该结构替换了原来的Inception中的多尺寸卷积结构。这里需要弄清深度分离卷积(D…

【创建型设计模式-单例模式】一文搞懂单例模式的使用场景及代码实现的7种方式

1.什么是单例模式 在了解单例模式前,我们先来看一下它的定义: 确保一个类只有一个实例,而且自行实例化并且自行向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法, 单例模式是一种对象的创建型…

微型计算机原理速通期末复习

文章目录微机基础原码、反码、补码、移码溢出实数型功能结构8086/8088内部结构80286内部结构80386/80486内部结构标志寄存器FLAGS寄存器阵列段寄存器寻址标志寄存器EFLAGS分段结构数据寻址方式立即寻址直接寻址寄存器寻址寄存器间接寻址寄存器相对寻址基址-变址寻址基址-变址-相…

Solidity vs. Vyper:不同的智能合约语言的优缺点

本文探讨以下问题:哪种智能合约语言更有优势,Solidity 还是 Vyper?最近,关于哪种是“最好的”智能合约语言存在很多争论,当然了,每一种语言都有它的支持者。 这篇文章是为了回答这场辩论最根本的问题&…

磨金石教育摄影技能干货分享|中国风摄影大师——郎静山

说到中国风摄影,你想到的画面是什么样子的?故宫、长城、苏州园林、大红灯笼高高挂,反正离不开传承了千八百年的古建筑。仿佛没有了这些历史古董的元素就没有中国味道似的。 其实中国风,其内核应该是传统的审美观念和哲学思想。中…

【雷丰阳-谷粒商城 】课程概述

持续学习&持续更新中… 学习态度:守破离 【雷丰阳-谷粒商城 】课程概述该电商项目与其它项目的区别项目简介项目背景电商模式谷粒商城项目技术&特色项目前置要求谷粒商城-微服务架构图谷粒商城-微服务划分图参考该电商项目与其它项目的区别 互联网大型项目…

深入linux内核架构--内存管理

【推荐阅读】 代码大佬的【Linux内核开发笔记】分享,前人栽树后人乘凉! 一文了解Linux内核的Oops 一篇长文叙述Linux内核虚拟地址空间的基本概括 路由选择协议——RIP协议 深入理解Intel CPU体系结构【值得收藏!】 内存体系结构 1. UM…

银行测试人员谈测试需求

今天呢,想用故事说话,先看看啥叫用户需求挖掘。其实看完故事之后,我自己颇为震撼,请看。 故事一: 100多年前,福特公司的创始人亨利福特先生到处跑去问客户:“您需要一个什么样的更好的交通工具…

loganalyzer 展示数据库中的日志

1 实验目标: 利用rsyslog日志服务,将收集的日志记录于MySQL中,通过loganalyzer 展示数据库中的日志 2 环境准备 三台主机: 一台日志服务器,利用上一个案例实现,IP:192.168.100.100一台数据库…

【Java八股文总结】之数据结构

文章目录数据结构一、概念1、时间复杂度与空间复杂度2、常见算法时间复杂度3、Comparable二、常见的排序算法1、直接插入排序2、希尔排序3、选择排序4、堆排序5、冒泡排序6、快速排序7、归并排序8、二分查找算法Q:什么时候需要结束呢?三、线性表1、概念2…

使用 Footprint Analytics, 快速搭建区块链数据应用

Nov 2022, danielfootprint.network 如果你有一个处理 NFTs 或区块链的网站或应用程序,你可以在你的平台上直接向用户展示数据,以保持他们在网站或者应用内的参与,而不是链接以及跳出到其他网站。 对于任何区块链应用或者媒体、信息网站来说…

秦皇岛科学选育新品种 国稻种芯·中国水稻节:河北秸秆变肥料

秦皇岛科学选育新品种 国稻种芯中国水稻节:河北秸秆变肥料 秦皇岛新闻网 记者李妍 冀时客户端报道(河北台 张志刚 米弘钊 赵永鑫 通讯员 赵力楠) 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯…

无线通信技术概览

电生磁,磁生电 电场和磁场的关系,简而言之就是:变化的电场产生磁场,变化的磁场产生电场。 电荷的定向移动产生电流,电荷本身产生电场。电流是移动的电场。静止的电荷产生静止的电场,运动的电荷产生运动的电…

java实现阿里云rocketMQ消息的发送与消费(http协议sdk)

目录一、准备工作二、代码实现1.添加依赖2.创建一个常量类存放公共参数3.调用HTTP协议的SDK 发送普通消息4.调用HTTP协议的SDK 订阅普通消息三、配置main的日志输出级别四、测试效果五、完成代码一、准备工作 登录阿里云官网,先申请rocketMQ,再申请Topi…

一文带你了解PCB设计中的常用基本概念

本文将从初学者的角度出发,一文带你快速了解PCB设计中的常用基本概念:一、FR4板材FR-4就是玻璃纤维环氧树脂覆铜板,线路板中的一种基材,可以分为一般FR4板材和高TG FR4板材,Tg是玻璃转化温度,即熔点。电路板…

分享好玩的h5小游戏制作_为什么要做h5微信小游戏呢

近年来,市面上一直流行各种h5游戏,例如投票、答题、刮刮乐、大转盘等等等等,而且我在各种营销场景下经常看到它们的身影,是做促销,引流和宣传的神器之一! 那么,怎么做好玩的h5游戏?还…

DIXml v5.21.0 for Delphi 11

DIXml v5.21.0 for Delphi 11 DIXml是一个嵌入式XML、XSLT,也是Delphi的EXSLT处理库(Embarcadero//CodeGear/Borland)。它构建在libxml2、libxslt和libexslt库上,但不需要更多的DLL或其他外部文件。 DIXml很容易成为Delphi中功能最齐全的XML和XSLT替代品…

实战讲解MyBatis缓存:一级缓存和二级缓存(图+文+源码)

1 缘起 回顾SpringBoot如何进行事务管理相关知识的时, 发现使用Spring的注解Transational即可实现事务管理,完成回滚操作, 然而SpringBoot中使用MyBatis这个ORM框架操作数据库,实现CURD, 这两者有什么关系呢&#xff…

集合类不安全

ArryList集合 多线程下不安全;可能会报错:java.util.ConcurrentModificationException(并发修改异常) import java.util.*; import java.util.concurrent.CopyOnWriteArrayList;//java.util.ConcurrentModificationException 并发…