HOOPS 3DGS技术概述

1.什么是HOOPS 3D图像系统

HOOPS 3D图形系统(HOOPS/3DGS)是一款高性能3D图形工具包,适用于开发人员构建Windows和UNIX操作系统以及Internet应用程序。HOOPS/3DGS高度优化的数据结构和算法大大简化了基于CAD/CAM/CAE、科学可视化和地理信息系统(GIS)应用程序的2D和3D、交互式、矢量和栅格图形的开发。
HOOPS/3DGS包括:

  • 一种子程序库( subroutine library ),用于创建、管理、查询和编辑应用程序的图形信息,并与应用程序的目标代码相链接。这些库可以是动态或静态链接的。

  • 一大套支持演示和集成代码,帮助开发人员了解HOOPS/3DGS并将其纳入应用程序。

  • 应用程序开发人员将其核心应用程序逻辑与HOOPS/3DGS和用户界面相结合,开发交互式图形应用程序。

2.HOOPS/3DGS架构

HOOPS/3DGS是一个具有数据库架构的保留模式图形系统。HOOPS/3DGS提供了创建、编辑、操作和查询存储在数据库中的图形信息的算法。这将图形数据封装在HOOPS中,并将其与接口层耦合。数据结构与算法的这种耦合是面向对象设计的基本原则。

数据封装、消息传递、实例化和属性继承也是HOOPS/3DGS的基本设计元素。虽然HOOPS/3DGS没有作为类库实现,但其体系结构采用了面向对象设计的这些基本方面。

HOOPS/3DGS库直接结合到应用程序的构建过程中,即与应用程序的其他目标代码链接以生成可执行图像。开发人员使用HOOPS/3DGS API从应用程序的其他组件中创建和管理几何对象。

下图所示的HOOPS/3DGS图形系统由两个主要子组件组成:一个图形对象数据库:HOOPS/3D GS段树(the HOOPS/3DGS segment tree,),以及一个渲染管道,该渲染管道名为HOOPS/ADGS结构化设备接口(HOOPS/3DGS structured device interface)。
在这里插入图片描述

HOOPS/3DGS Segment Tree and Rendering Pipeline

2.1Retained-Mode图形系统

即时渲染图元而不将其存储在显示列表中的图形系统称为即时模式系统。将图形信息存储在专门为显示图形而设计的数据结构中的系统称为保留模式图形库。HOOPS/3DGS是一个保留模式图形库。在保留模式系统中保留图形图元提供了显著的好处:

性能-如果图形系统(而不是应用程序)保留了所有图元的副本,它可以更快地修改和遍历图形信息,并进行优化,以加快渲染场景的速度。例如,图形系统可以计算边界体积,该边界体积存储一组图元的位置和范围的粗略度量。在渲染过程中,许多基本体可能在屏幕上不可见。边界体积允许系统快速确定一组图元是否在屏幕上,以便仅将那些实际可见的图形图元发送到要渲染的显示硬件。

选择-图形系统的一个重要功能是执行选择(也称为“拾取”),其中图形系统确定用户用光标指向哪个图形图元。在没有显示列表的情况下,图形系统执行选择的唯一方式是让应用程序重新发送所有图元,因为它们没有被图形系统保留。显示列表允许图形系统更快地执行选择,通常是一个数量级。

窗口系统支持-如果包含场景的窗口被另一个窗口部分遮挡,然后被带到前面,则需要重新绘制窗口的新曝光区域。如果图形系统将图元存储在显示列表中,则可以在不返回应用程序的情况下重新绘制窗口。(窗口的图像也可以存储为位图,允许立即重新绘制受损区域。HOOPS/3DGS也支持这种方法。)

全局渲染算法-许多类型的渲染器需要所有图形图元的副本。例如,对于光线跟踪和光能传递,对象的颜色受其他对象的影响,因此渲染器需要所有基本体的数据,然后才能开始绘制任何基本体。这样的高级渲染算法需要使用显示列表来存储基元

2.2 对象数据库

HOOPS/3DGS数据库将图形数据存储在称为“段”的对象中。将线段视为几何体和描述几何体绘制方式的属性的容器。段到段的关系是分层的,被描述为“父子”配对,或者一个段“拥有”其他段(其子段)。映射是一对多;也就是说,一个父段可能有许多子段,但每个子段都有一个唯一的父段。

分段可以多次实例化,并在多个位置插入到树中。这个过程被称为包含,正如“一个片段包含另一个片段”。通常,只有片段的属性集需要实例化并由其他片段使用;这个过程叫做样式化。包含和样式将在下面的样式段部分进行更详细的讨论。

这些段到段的关系导致层次树结构,或者更具体地说,是有向无环图。此结构支持属性继承。子段具有与其父段相同的属性值,除非它们专门为某些属性设置了自己的本地设置。

HOOPS/3DGS数据库结构通过将几何数据划分为具有同质属性的对象来确保最佳速度。这最小化了在绘制图形信息期间改变硬件显示上下文的需要,并优化了显示列表吞吐量。

2.2.1 坐标和坐标系

在HOOPS/3DGS中,与大多数图形系统一样,使用笛卡尔坐标指定空间中的点。HOOPS/3DGS例程总是采用三个x、y和z坐标;这意味着HOOPS/3DGS中的所有点都是三维的。然而,z值为零表示二维对象,因此HOOPS/3DGS将酌情使用更优化的二维渲染例程。

HOOPS/3DGS中的坐标使用单精度浮点数指定。然而,默认情况下,C和C++使用双精度(64位)数字执行浮点运算。当传递给HOOPS/3DGS调用时,这些双精度数字将转换为单精度。

HOOPS/3DGS包括一个双精度模块,该模块允许在创建和查询几何图形时使用双精度浮点值。它通过为几何体创建、编辑和查询以及几个坐标系转换例程提供所有HOOPS/3DGS例程的变体来实现这一点。

2.2.2 通过引用插入几何体

当几何图形插入HOOPS/3DGS数据库时,HOOPS/3D GS会复制所提供的数据;这对于保留模式系统是正常的,并且对于数据封装是必要的。对于某些类型的几何体,此数据可能相当大。制作副本会浪费空间,并使应用程序比需要的更大、更慢。

为了避免这个问题,HOOPS/3DGS允许通过引用插入网格、壳和图像。通过引用插入几何图形告诉HOOPS/3DGS不复制数据是可以接受的。对于网格,此数据是点列表。对于壳,它是点列表和面列表。对于图像,它是图像数据。

2.2.3 接口

HOOPS/3DGS可以从C、C++、C#和Java调用。

2.3 数据库遍历

必须针对计算机硬件上可用的特定设备接口检查和格式化数据库中的信息。此操作称为数据库遍历。内部遍历例程在树中逐段“遍历”,并将找到的信息发送到渲染管道。

一个子程序调用Update_Display命令HOOPS/3DGS遍历数据库树,访问包含要绘制的内容的每个节点。若要绘制分段,HOOPS/3DGS将其包含的任何几何体连同分段的属性一起发送到渲染管道,并递归绘制任何子分段。因此,绘制一个段将绘制以该段为根的整个树分支。

因为HOOPS/3DGS是一个声明性图形系统,所以HOOPS/3D GS遍历树的顺序(甚至是否遍历整个树)并不重要。这允许HOOPS/3DGS选择如何遍历数据库。HOOPS/3DGS可以做出几种类型的决定来控制/最小化发送到渲染管道的几何体数量,从而提高性能或提高可用性。它们包括:

  • 选择性遍历-由于HOOPS/3DGS可以跟踪更新之间未发生变化的显示部分,因此消除了不必要的重绘,屏幕的受损部分可以选择性地重绘,也可以立即从软件z缓冲区或软件帧缓冲区中重绘。

  • 增量更新-HOOPS/3DGS包含更新逻辑,允许将几何体增量添加到场景中,而无需完全重新绘制。

  • 时间限制更新-可以指示HOOPS/3DGS在指定的时间内尽可能多地重新绘制场景。

  • 单驱动程序更新-可以在单个驱动程序实例上执行更新。例如,在某些情况下,开发人员可能希望更新postscript驱动程序树,但要避免显示更新。更新也可以在单独的线程上执行,从而在用户返回与显示器交互时生成硬拷贝。

2.4 渲染管道:The HOOPS/3DGS Structured Device Interface(HDI)

HOOPS/3DGS优化性能的关键是其渲染管道,称为HOOPS/3D GS结构化设备接口(HDI)。HDI接受在段中找到的信息,将其重新格式化为硬件输出设备接口,并将其发送到设备进行绘制。HDI依次分解信息,通过软件映射层传递数据库信息,直到其为输出设备可以处理的格式。

如果硬件设备接口理解3D信息(如OpenGL),HOOPS/3DGS可以传递信息而无需太多更改。但是,如果设备接口仅理解2D像素(如Xlib或GDI),则必须使用多个分解层。这确保了给定设备上的最佳渲染吞吐量以及HOOPS/3DGS API跨多个平台和设备的一致功能。该过程如下图所示:

HDI可确保应用程序性能与系统能力相适应。即使在具有图形硬件的系统上,由于高度优化的渲染算法,在某些情况下,HOOPS/3DGS软件也可以比硬件更快。

2.5 控制流

典型的基于HOOPS的应用程序中的控制流程如下:

  • 1.应用程序的最终用户通过用户界面生成事件,以创建新的或操作现有的应用程序数据(图形或非图形)。

  • 2.应用程序代码对HOOPS/3DGS中存储的信息进行了一些更改。

  • 3.HOOPS/3DGS然后遍历段树,确定应该绘制什么,并将该信息发送到HOOPS/3D GS结构化设备接口,该接口重新格式化输出设备的功能,然后将其发送到输出设备。

  • 4.输出设备从图形系统接收信息,并在监视器或打印机上绘制图形信息。

  • 5.用户看到新图片,决定下一步要做什么,并使用用户界面生成新的输入事件。(这让我们回到步骤1。)

3.HOOPS 作为一个面向对象系统

3.1使用Segment封装和数据隐藏

HOOPS/3DGS图形数据库将图形场景存储为段的层次结构,这自然有助于组织图形信息。就面向对象的编程而言,将一个段看作一个对象。

  • 段封装公共接口。大多数HOOPS/3DGS命令都会修改段的状态,或返回有关段或段内容的信息。

  • 段使用数据隐藏来保护其表示的内部细节不受程序员的影响。这通过隐藏不必要的细节使程序员的生活更简单。它允许HOOPS/3DGS在不同的平台上修改其内部表示,以便于移植,利用更快的算法,或结合改进的渲染技术。

  • 段具有属性,其作用类似于对象的成员变量。

  • 段可以有一个或多个子段。数据库中的段形成的层次结构类似于面向对象语言中的类层次结构(但更动态)。

  • 正如成员变量由类的子类继承一样,属性也由段的子段继承。这种形式的继承称为属性继承。

  • 可以通过使用include segments和style segments来重用段。

  • 段包含一个列表,该列表中是属于该段的几何图形。

3.1.1段路径名和句柄

整个段树的根位于一个段下,根段用正斜杠“/”表示,每个段在段树中占据一个唯一的位置,称为其路径名。

有几种不同的方法来识别并随后引用一个段:

隐式-对HOOPS/3DGS属性和几何命令的调用引用当前打开(活动)的线段,或者更具体地说,引用最近打开的线段。

显式地,按名称-您可以通过使用ASCII字符串(其中“/”表示子段)通过其完整路径名来引用段。例如,“/driver/msw/window0”将指“window0”段,它是“msw”的子段,等等。

按键访问-按键访问段通常比按名称访问更方便,速度也更快,因为键不需要查找名称。键是一个长整数,在最初创建段时由HOOPS/3DGS返回。键通常用于将HOOPS/3DGS段和几何图形与应用程序数据(例如数据结构指针)相关联。

3.2 消息和方法

3.3 属性继承

4. GEOMETRY AND ATTRIBUTES

4.1 HOOPS/3DGS提供的Geometry

4.2 Attributes

HOOPS Visualize中的属性用于指定如何渲染和查询存储在数据库中的几何图形。还有一些非图形属性,其中大部分帮助系统连接和配置输出和输入设备。HOOPS Visualize中的主要属性类型有:
Display
Modeling and Viewing
Rendering
Selection
Driver Options
System Options
Heuristics

所有属性的完整列表可在编程指南中找到。

Heuristics

启发式是给HOOPS/3DGS的提示,帮助它在遍历时决定如何最佳地渲染段树。通过告诉HOOPS/3DGS是否使用以下信息或技术,可以将系统的性能调整到给定的应用程序图形数据。

  • Backplane culling - HOOPS will perform backplane culling in hardware if available; it also attempts to use CPU-specific extensions to speed up the culling process
  • Clipping
  • Concave polygons
  • Hidden surfaces
  • Incremental updates
  • Intersecting polygons
  • Memory purge
  • Polygon handedness-这使得开发人员可以指定一个惯用手,以允许执行背板剔除.
  • Quick moves-使用XOR或硬件重叠平面支持重叠的3D几何;还支持“斜切”技术(利用底层OpenGL缓冲区扩展),使3D对象能够在场景中快速移动

5.INPUT AND HIT-TESTING

6.使用GUI工具集成HOOPS/3DGS

正如HOOPS/3DGS是图形组件一样,也有些组件提供图形用户界面(GUI)技术。通常,开发人员希望将HOOPS/3DGS与Windows上的MFC、UNIX上的MOTIF或跨平台GUI的Qt和JAVA等GUI组件一起使用。

7.HOOPS/3DGS 中间模式

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haimianjie2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值