更多参见: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类及其派生类促进这些操作。
4.HOOPS/MVO类
当使用HOOPS/MVO框架构建应用程序时,必须在应用程序的初始化阶段创建并初始化HDB类的单个实例。一旦有了HDB对象,就可以开始创建模型、视图和操作符。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文件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是参考实现的宝贵存储库,不仅用于选择和相机操纵等基本功能,还用于冲突检测和动画等更复杂的功能。