平台:
造型引擎——ACIS
显示引擎——Direct3D/OpenGL/GDI
应用框架——HOOPS
组件关系图
ACIS——造型引擎
ACIS 是美国Spatial Technology公司推出的三维几何造型引擎,它集线框、曲面和实体造型于一体,并允许这三种表示共存于统一的数据结构中,为各种3D造型应用的开发 提供了几何造型平台.Spatial Technology公司在1986年成立,目前ACIS 3D Toolkit在世界上已有380多个基于它的开发商,许多著名的大型系统都是以ACIS作为造型内核,如AutoCAD,CADKEY, Mechanical Desktop,Bravo,TriSpectives,TurboCAD,Solid Modeler,Vellum Solid等。
ACIS 核心功能
3D 造型
Ø 将2D曲线经拉伸、旋转、扫掠等操作生成复杂的3D曲面或实体
Ø 高级倒角和圆角操作
Ø 网格曲面生成
Ø 阵列操作
Ø 实体抽壳和曲面加厚
Ø 曲线、曲面和实体的交互式弯曲、扭曲、延展、变形
Ø 曲线、曲面、实体的交、并、差运算
Ø 放样操作
Ø 模型中拔模面生成、曲面等距和移动
3D 模型管理
Ø 在模型的任何级别关联用户自定义的数据
Ø 跟踪几何和拓扑改变
Ø 计算质量和体积
Ø 使用单元拓扑表示实体模型子域
Ø 独立于历史流的无穷次的撤销(undo)和恢复(redo)操作
3D 模型显示
Ø 将曲面几何离散成多边形网格表示
Ø 利用可选可变形造型组件创建高级曲面
Ø 利用可选PHL V5 组件生成带隐藏线消除的精确2D工程图
Ø 利用Spatial提供的Tech Soft America的HOOPS/3dAF以及HOOPS/ACIS Bridge等产品搭建图形交互应用程序
ACIS 是一个完整的modeling的内核,说白了就是一套用C++写的modeling类库,只要你掌握了这个库就可以完成所有的建模工作(基本上所有3D造 型软件的功能他都有),但是这个库的易用性不够,所以在其上又开发了一些API进一步对底层的acis类库进行封装,而最上层则是现在非常流行的一中类 lisp的解释器平台,应用scheme语言作为上层的开发语言,经过这么多步骤的封装,你只需要输入(block(0,0,0), (10,10,10))这个命令就能建立一个立方体,其他相似的简单命令就能完成很复杂的操作,已经相当于 AutoCAD里面的命令行模式了。
建立一个模型后不能只存为一个数据文件就完了,我们需要把这个模型显示在计算机屏幕上,并实时对他进行操作,这就需要一个图形显示引擎来干这个事儿了。
HOOPS 是一个在底层图形驱动基础上开发的显示类库,他不是一个单独的图形显示引擎,而是对OpenGL、DirectX这些图形引擎进行封装和扩展的结果。他的 最大优势是对大模型操作和显示的优化以及一种压缩比高,适合网络传输的stream模式。这两者都可以理解为对原有图形引擎的优化,使文件更小,运行更 快。当然,灵活的对OpenGL和directX的支持也是其卖点,HOOPS保证自己能同步跟上OpenGL和DirectX的发展步伐并在其上做有益 的改进。
ACIS是一个 B-rep建模引擎,它是通过定义几何对象的边界来表达一个实物。边界是可组成一个闭合区域的一系列面的集合。其拓扑结构如下图:
Body 模型对象的根结点,是块的集合,能描述线体、板体、实体,也能是几个彼此分离的体的集合,包含 0 个或多个 Lumps 。
Lump 空间有界的连通的区域。 用 Shell 约束的点的集合,一个实体上附加一个悬挂面也称为 Lump 。
Shell 一系列连通的Face / Wire 的集合。 线、面的集合,能位于实体外,也能在内部形成空洞。一个体含一个悬挂面,一个体内嵌许多和外表面相连的面都称为 shell 。
Face 广义的面。 ACIS 能定义无限薄的双面或单面 ( 这种情况下,单面法向量指向面的一侧,实体材料存在于另一侧 ) 。
Loop a connected series of coedges, Closed
Wire not attached to faces
Coedge Edge被多个Face引用。 ACIS 中允许边是一个、两个或多个面的交线,因此它能描述二流形体和非流形体。一条边由两条共边 ( 有时也是单条共边 ) 组成。
Edge one or more vertices。 边是多个面的交线时 ( 形成非流形体 ) ,半边保存顺序非常重要,用它来决定面的发散方向。
Vertices
Body 处于最上层,它可以由任意的拓扑元素组成。几个不共点的Body可看作一个Body。Body可以有任何数目的Lumps。Lumps代表空间中一个约束 的连接的区域。一个Lumps是一系列整个相连点集,而不论它们是三维、二维、一维或是它们的混合。因此一个实体带有一个悬挂面的是一个Lumps,而两 个不相连的薄面则代表两个Lumps。Shell是一系列整个相连的面。一个实体带有一个悬挂面的是一个Shell,而一个实体带有一个不相连的面则是两 个Shell。Subshells 不能够通过API来访问,它基本上不直间使用。一个FACE是空间一个几何表面,Face的边界是由Loops构成的。Loops是由一系列相连的 Coedge所组成。Coedge记录的是一个面Loops的中的一条边。引入是Coedge为了表示多个面共边,这就使得流体和非流体的造形成为可能。 对于Coedge很重要的一点是要理解它的方向性。在Coedge类中有很多指针,可指向它的相邻,前一个,后一个等等,这就使得在进行模型的遍历时是很 方便的。拓扑模型的遍历就是一个从上到下的循环查找的过程。
HOOPS——应用程序框架
在3D 应用程序开发早期,虽然直接使用OpenGL或Direct3D等图形编程接口就可以满足一般的可视化需要,但如果3D应用程序需要更加高级的图形功能 (如隐藏线消除,高级渲染和贴图、动画、文字处理、2D矢量图输出、高级动画等)或需要对图形性能进行优化时,开发人员还需要做大量的工作,如建立自己的 图形数据库以及对包括OpenGL、Direct3D在内的多种硬件驱动提供支持等,而这些图形功能的实现需要很多专业图形开发人员通过多年的努力才可能 完成。
为了使用户能够快速开发出高品质的3D应用程序, Spatial公司不仅提供了ACIS造型组件、InterOp数据接口组件,还和著名的可视化组件开发商美国TSA公司进行紧密合作,提供HOOPS可 视化组件的授权和技术服务,使用户可以在更高层次的图形平台上开发3D软件,从而提升软件产品的竞争力,降低开发成本并加快产品上市。
HOOPS组件是建立在OpenGL、Direct3D等图形编程接口之上的更高级别的应用程序框架,由美国TSA公司开发并由TSA和Spatial公司负责发布和提供技术支持。
HOOPS 不仅为软件开发人员提供了强大的图形功能,如高质量的模型显示、便捷的人机交互、包括OpenGL和Direct3D在内的多种渲染管道的支持、高级渲 染、2D图形的矢量化输出、动画、动态干涉检查以及图形数据流化处理等,此外HOOPS中还内嵌了多边形优化和大模型处理等技术,能够大大提高3D可视化 的性能。另外HOOPS开发包中提供的大量应用程序级的实例源码,可以帮助用户在很短的时间内搭建出商业级的3D图形应用程序。
HOOPS 组件按功能可进一步分为HOOPS/3dAF、HOOPS/Stream以及H O O P S / N E T三个子组件,其中HOOPS/3dAF组件是一个3D图形应用程序框架,采用了保留模式的图形数据库和多种渲染管道来管理和绘制图形对象; HOOPS/Stream组件可以用来对场景图数据进行流化处理;而HOOPS/NET组件则可以用于网络协同。这三个子组件既可以单独授权,也可以结合 在一起使用。
HOOPS和ACIS、InterOp、Direct3D/OpenGL之间的关系
HOOPS 组件不但可以单独用于 3D 模型的可视化,而且可以和其他造型内核(如 ACIS )和数据接口组件(如 InterOP )结合使用。下图所示非常直观地说明了 HOOPS 和 ACIS 、 InterOp 之间的关系以及如何使用这三个组件来构建 3D 应用程序的基本框架。
3D 应用程序通过 HOOPS/GUI 和 ACIS 、 HOOPS 组件建立连接,从而实现利用 ACIS 内核进行造型,并利用 HOOPS 组件进行可视化和人机交互。 ACIS 和 HOOPS 之间通过 HOOPS/ACIS bridge 来进行通信,从而实现文档和视图分开; InterOp 组件用于读写实现 ACIS 模型和其他格式 3D 模型之间的相互转换; HOOPS/Stream 组件则可用于读写 3D 场景图数据。
利用 HOOPS 、 ACIS 和 InterOp 开发 3D 应用程序的框架