1、引言
建立三维实体模型,用合适的数据结构储存组成装配的各部件的几何、拓扑信息,是实现实时动画及计算机仿真的基础。要生成高逼真度的图像,首先要生成高质量的三维实体模型。目前在众多的计算机仿真系统中,普遍采用OpenGL建立系统的三维真实感图形。但是OpenGL只能通过其基本图元来绘制几何模型,不具备实体造型能力。OpenGL中提供了十几个生成三维实体模型的辅助库函数,这些函数均以aux作为函数名的前缀。球体、立方体、圆柱等简单的模型,可以利用这些辅助函数来实现,如函数auxSolidSphere(GLdoubler),绘制一半径为r的实心球体。但是用这些函数建立复杂的三维实体模型非常困难。
由于简单地用图元来绘制各部件或者重新开发一个几何造型系统不现实,所以只有考虑采用现有的造型软件建立几何模型,例如,用户可以通过其它建模工具3DMAX、AutoCAD等来辅助建立三维实体模型数据库。然后通过数据交换标准由仿真系统获得造型软件生成的实体模型的数据,用适当的数据结构来储存这些几何、拓扑信息,以建立仿真系统的实体模型。造型软件中,AutoCAD的应用广泛、造型功能强、二次开发以实现参数化的能力而且它的图形交换文件DXF为大多数CAD软件所接受,同时,AutoCAD的DXF文件中对于三维实体的描述是采用三角形面片逼近的方法,而在OpenGL函数库中,提供了这种绘制三角形面片的方法,从而为三维实体的绘制提供了简便的途径。所以,我们在最近研制的起重机部件装配仿真系统中用AutoCAD作为造型软件。
2、实体模型的描述
仿真系统三维实体模型的建立,首先由现有的造型软件AutoCAD建立几何模型,然后通过它的数据交换文件DXF文件,仿真系统获得AutoCAD生成的实体模型的数据,建立系统自身的实体模型。
一个完整的DXF文件由四个段和文件结尾组成,它们的顺序是:
(1)标题段。该段记录了AutoCAD所有标题变量的当前值,这些标题变量记录了AutoCAD的当前工作环境。
(2)表段。该段包含了七种表,按顺序是:视窗表、线型表、图层表、字样表、用户坐标表、尺寸标注式样表和应用程序标识表,这些表记录了当前图形编辑的支撑环境。
(3)块段。该段记录了每一个块的定义,记录了这些块的名字、类型、基点及组成该块的所有成员。
(4)实体段。该段定义了每个实体的种类,所在图层名、颜色、线型、厚度、实体描述字及有关几何数据。
(5)文件结尾。只有“”和“EOF”两行。
具体内容由若干组构成,每个组占两行,第一行为组代码,第二行为跟随值,组代码相当于数据名称的代码,跟随值是数据的具体值。DXF实体分类和IGES类似,几何实体包括如点、直线、圆弧、多义线、三维平面、轨迹等;描述实体包括如尺寸标注、属性定义、正文、块属性等;结构实体包括如型、块、子实体等。
AutoCAD将形体表面作三角形剖分,即所有的表面(包括平面、曲面)都用三角形面片来近似表示。
三维形体的几何、拓扑信息都记录在实体(ENTITIES)段中,其由多个POLYLINE实体描述组成,每个POLYLINE实体对应AutoCAD中的体素和由扫描产生的基本形体。
POLYLINE实体描述中的信息包括:形体的所有顶点坐标;组成三角形面片的顶点号,顶点按符合右手法则的顺序排列。
AME是一个真三维的实体造型系统,系统的输入主要采用CSG及扫描两种方式。实体在计算机内同时采用CSG及B-rep两种表示模式,先将用户的输入用CSG树的结构加以记录,然后随着造型进程转换为B-rep表示。从13.0开始,AutoCAD首次使用了ACIS(AmericaCommitteeforInteroperableStandard)技术,将实体造型系统集成到AutoCAD的核心模块上,实体造型已成了其基本功能。ACIS技术允许对实体做更完整更精确的描述,在建立复杂实体时,仍需对基本体素做布尔操作,但计算机内不再使用CSG树,而是利用ACIS机制生成实体的B-rep表示。
3、系统所要求的模型数据结构
系统中部件之间干涉检验的求交算法是部件间的边面求交,随后还要进行交点和三角形的包含性检验,以及判断部件是否相交,其中包括使用包围体的加速措施。算法要求点的几何信息,面方程的获得要求面和点的拓扑关系F→{V},边方程的获得需要边和邻面的拓扑关系E→{F},还需要边和端点的拓扑关系E→{V},部件及体素要求有包围体的数据。
真实感图形的生成算法要求正确地计算各顶点的法向量,以反应物体真实表面,所以要有法向量数据。真实感显示还要求部件的材质信息。动画的实现要求部件的装配方向信息。布局调整要求部件的变换矩阵数据。在参考翼边结构的基础上,针对本仿真系统对各种信息、数据的要求,结合DXF文件的特点,特作如下处理:
整个系统的图形由组成装配的各个部件(包括减速器、电机、万向节等)的图形组成,通常一个部件在同一次造型中完成,因此可将一个部件形体作为一个DXF文件输出,每个部件对应一个DXF文件,DXF文件中包括组成部件形体的所有体素,以及其边界数据。但是,DXF文件考虑的仅仅是几何、拓扑信息,而没有材质这样的物理信息,一个部件往往由不同材质的零部件组成,因此在真实感图形显示时必须有材质信息。为了增加材质信息,将同一材质的体素作为同一DXF文件输出,这样多个体素集组成一个部件形体。因此建立链表结构TXT记录装配部件的信息,链表结构DXF记录一部件中同材质的体素集的信息,链表结构POLYLINE记录体素的信息。
由于AutoCAD记录体素的几何、拓扑信息使用的是B-rep表示法,因此针对体素,我们的仿真系统采用类似翼边结构的数据结构,建立了顶点、边、面链表结构,其中由于边链表的生成算法是通过遍历面链表,对应三角形面中的任意两个顶点都生成一条边,因此会产生一条边记录两次,为了方便删除链表结点,边采用双链表结构。点的几何信息包括点的坐标,以及点的法向量;面的几何信息包括面的属性,面的法向量以及其方程系数。建立了点、边、面间的三种拓扑关系,即E→{V},E→{F},F→{V}。数据结构下图所示。

仿真系统实体模型的数据结构图