面向虚拟装配系统的模型数据库构建

2010-01-01 01:47:18刘国伟贾庆轩孙汉旭宋荆洲
图学学报 2010年1期
关键词:二进制多边形纹理

刘国伟, 贾庆轩, 孙汉旭, 宋荆洲, 高 欣

(北京邮电大学自动化学院,北京 100876)

目前,国内外不少研究机构及大型企业都在虚拟装配技术研究方面取得了很大的成就,如美国华盛顿大学与美国国家标准技术研究所合作开发了虚拟装配设计环境(Virtual Assembly Developmen Environment, VADE)[1]; 德 国Bielefeld 大学致力于将虚拟现实交互技术与人工智能技术结合,开发了基于指示的虚拟装配系统CODY;浙江大学开发了基于拆卸的虚拟设计与虚拟装配系统(Virtual Design and Virtual Assembly System, VDVAS)[2];清华大学提出并实现了一种并行环境下装配仿真系统(Assembly Simulation System, ASML S),该系统能在产品设计阶段实施数字化预装配以验证和改进装配工艺[3]。上述关于虚拟装配的研究各具特色,但都不很成熟。在虚拟装配系统中,为了减少计算量提高实时性,零件实体通常通过简化的多边形面片模型描述。采用三角形面片模型进行零件信息表达有以下优点[4]:能够减少计算量,提高虚拟装配系统的实时性;为虚拟装配系统处理异构CAD 系统的零件对象提供了可能。但与此同时,采用三角形面片模型进行零件表达也带来损失了精确几何信息与拓扑信息以及大量工程设计信息等问题。现在通用的方法是采用传统的三维CAD 商品化软件进行产品的建模,然后对CAD 模型数据进行转换,并通过对三维CAD 商品化软件的二次开发来获得含有零件装配信息的中性文件,一起导入到虚拟装配系统中完成虚拟装配环境下的零部件建模[5]。

但此种方式有个致命的缺陷就是针对有约束关系而尚未在建模软件中实现装配的零件无法实现虚拟装配功能,比如标准件等常用的零件。因为二次开发得到的中性文件,记录的只是在建模软件中已经实现了装配的零件的装配信息。而对已经实现了在建模软件下装配的零件,在VR 环境下完成虚拟装配只是增加了视觉效果和交互感,并没有对缩短新产品的开发周期,减少成本起到直接的作用,因此其必要性与应用领域均受到了质疑。并且针对大量模型中性文件的信息过于冗余不便于对信息的管理。

针对上述缺陷本文采用三维模型数据库来存储装配模型及其装配信息,实现对模型的虚拟装配,拓宽虚拟装配的应用领域。

1 Oracle 数据库的建立

SQL3.0 作为关系数据库的标准语言,提供了一种新的字段类型 LOB(Large Objects Binary—二进制对象),它是用来存储大量的二进制和文本数据的一种数据类型。其中的BLOB 类型适用于存储海量的二进制数据,如图像、视频、音频等格式的文件,Oracle 将不同类型的三维模型文件和纹理文件均以二进制格式存储在BLOB字段中,实现三维模型的数据库存储。通过Oracle数据库软件的工具 Database Configuration Assistant 建立数据库并通过工具 Enterprise Manager Console 创建表。

空间和数据表如表1 所显示。

表1 数据表

该表设计了BLOB 类型数据用于存储模型的二进制流。因为,三维模型对应的纹理图像是独立于模型之外的,因此,数据库关系表中分别设计了模型与纹理的二进制的存储字段(BLOB)来分别存储模型数据与纹理数据。同时,为了提高管理和查询、检索的效率,还设计了模型类型和模型名称字段。而针对虚拟装配系统中需要的模型约束信息和模型的关键参数,在表格中定义了相应的字段来存储。对存储在数据库中的三维模型,采用Oracle 数据库进行存储管理,可以方便的对模型进行更新、查询检索,解决了三维模型的管理问题。通过构建多个模型类模块,从而实现了对目前虚拟现实中最为常用的VT(Vtree使用的文件格式)与FLT(OpenFlight 使用的文件格式)格式模型的支持。

2 VC 平台对数据库的访问技术

OO4O 是Oracle 公司推出的一个基于COM的数据库连通性工具, 它能够无缝地联合并优化对Oracle 数据库的访问。OO4O 由一个进程内自动化服务器、一个Oracle 数据控件和OO4O 库类组成。在Visual C++环境下使用OO4O 来访问Oracle 数据库是通过OO4O C++类库实现的, 它封装了访问Oracle 数据库的一系列类。虽然这些类是通过OLE 技术实现的[6],但C++开发人员可以在程序中直接使用它们而不必需要OLE 的知识。OO4O C++类库完全支持对LOB 大对象的操作。提供了ODatabase、ODynaset、OBlob、OClob、OBfile、OException 六个类,使用这六个类的方法就可以方便地实现对LOB 的访问。

其实现BLOB 读取的函数为:

m_odb.Open(m_session,lpdbname,lpUserID,lpPsw) //建立数据库连接,lpdbname 为数据库名,lpUserID 为用户名,lpPsw 为用户密码

oblob.Read(&status, buffer, bufsize); 读取数据

oblob.Write(buffer, amtread, piecetype); 写入数据

3 模型存储与显示

3.1 VT 与FLT 模型格式

VT 与FLT 数据格式都是一种逻辑化的有层次的景观描述数据库。每一个VT 或FLT 文件都有一个数据库结构用以组织可视数据库到逻辑组中,帮助形成有实时功能的函数,如视野精选(culling),LOD 切换和实例化。数据库里的每个节点类型都有数据属性[7]。主要的节点类型如下:

Database Header(数据库头) 由fltHeader记录代码标记。头节点是文件的根节点,描述了数据库层次和树结构的根。每个数据库文件只有一个头节点。

Group(组) 由fltGroup 记录代码标记。组节点代表逻辑的数据库子集合。

Object(* 对象) 由fltObject 记录代码标记。对象节点包含了多边形的逻辑集合。

Polygon(多边形) 由fltPolygon 记录代码标记。多边形节点描述了几何体。

Nested Polygon(嵌套多边形) 嵌套多边形是在它的父节点上绘制的共面的多边形节点。

Mesh(网格) 由fltMesh 记录代码标记。网格定义了一系列相关的多边形,每一个都共享通用的属性和顶点。一个FLT 数据库的层次结构被作为一个文件存储在磁盘上。文件由线性的二进制流记录组成。字节在文件中的存储顺序是按照Big Endian 方式存储的。

3.2 VT 与FLT 模型数据的读取与显示

由于直接用二进制读取VT或FLT数据库所需的工作量较大,因此Multigen-Paragim公司提供了一个函数库Open Flight API,以便于用户对三维模型进行开发。在本接口实现中主要用到读取函数来遍历获取用于存储FLT 模型数据库中的信息。主要用到的函数如下:

打开/ 关闭数据库:m_odb.Open();m_odb.Close();

遍历数据库: mgGetChile,mgGetNext

获取数据库中的纹理参数:mgGetTextureCount,

mgGetFirstTexture,mgGetNextTexture。

获取多边形纹理索引:mgGetAttIndex。

获取多边形材质参数:mgGetMaterialElem。

获取多边形顶点坐标参数:mgGetVtxCoord。

获取多边形顶点法向量参数:mgGetVtxNormal。

获取多边形顶点纹理坐标参数:mgGetAttList。

本软件的定位在获取三维实体的顶点坐标、顶点法向量、材质、纹理等几何、渲染信息并正确显示。接口程序实现的整体思路是获取数据库中所有多边形的信息,这些信息包括多边形纹理、材质、各顶点坐标、法向量和纹理坐标,然后将这些信息存在一个多边形链表结构中,为了程序编写的方便,这里为了实现的方便,利用了基于Open Gl开发的Vtree软件包来实现VT及FLT模型文件的显示,省去了自己设计函数的步骤。其核心代码如下:

读取模型文件

3.3 装配约束定义与存储

装配由组成装配体的单个零件及它们之间的装配关系组成。对于装配中零件之间的匹配关系的交互设置表达大多用边界表示法(B-rep)。在装配关系中,参与装配的几何图元(点、线、面等)根据形状一般可分为直线、曲线、平面、曲面等,在机械零件中常用的有直线、平面、柱面等。零部件中常用的装配约束关系主要包括:零部件上参与装配的两个几何图元之间指定一定的距离、指定一定的角度和重合三种情况。本文讨论的几何图元包括平面、圆柱面和直线。约束关系包括平面与平面之间的共面约束、角度约束和距离约束;圆柱面之间同轴约束关系和直线与其他线或面之间的距离、重合等约束关系。并将约束关系作为一个属性存储在数据库的列中,如图3 所示。

4 虚拟装配系统构建

系统从模型数据库中读取所有FLT模型数据,填充到当前视图中。本软件利用MFC编制的单文档视图程序框架,并利用Vtree生成了装配场景视图。软件从数据库中通过OO4O函数读出模型和纹理二进制文件,然后按照VT与FLT模型的类型,调用Vtree中的模型读取函数,读出模型的所有数据信息,调用对应输出函数输出到虚拟装配场景视图中,进行干涉检查和约束识别,其系统流程和系统结构分别如图1和图2所示。

图 1 虚拟装配系统流程

图 2 虚拟装配系统结构

5 应用实例

装配体的CAD 模型通过Pro/ Engineer 2001 和UGV18.0 建立,并通过Multigen Creator 转成FLT 格式文件或进一步用OpenFlightVTree 将其转化为VT 格式文件存储在数据库中,CAD 模型的约束信息由人为定义并存储在数据库中,存储界面如图3 所示。

图3 数据库操作界面

模型通过数据库接口输出到装配场景中,如图4 所示。系统会自动提取数据库中的装配信息,并通过三维鼠标实现在场景中的虚拟装配,装配结果如图5 所示。

图4 虚拟装配场景

图5 虚拟装配界面

6 结 论

本文针对虚拟装配系统中的模型存储技术与装配信息获取技术,提出了利用关系数据库来存储三维模型与约束信息的方案。将三维建模软件创建的模型利用软件进行格式转化,通过数据库接口实现了FLT和VT模型在数据库中的存储与读取功能。并解析了FLT 模型的关键性结构,在 VC++6.0 环境中实现了对模型的显示与浏览功能。同时利用关系数据库的高效管理方法,避免了基于中性文件实现装配的弊端,为模型的共享、更新、查询检索提供了有效的保证。这些都会提高虚拟装配技术在社会生产实践中的应用价值。

[1] JA Yaram S, JA Yaram U, Wang Y, et al . VADE: avirtual assembly design environment [J]. IEEE Computer Graphics and Applications, 1999, 19 (6): 44-51.

[2] 万华根, 高曙明, 彭群生. VDVAS: 一个集成的虚拟设计与虚拟装配系统[J]. 中国图像图形学报, 2002, 7(1): 27-35.

[3] 张林鍹, 童秉枢, 肖田元, 等. CE 环境下装配仿真系统的实现及应用[J]. 计算机应用, 2000, 8(2): 194-197.

[4] 刘振宇, 谭建荣, 张树有. 面向虚拟装配的产品层次信息表达研究[J]. 计算机辅助设计与图形学学报, 2001, 13(3): 223-228.

[5] 刘检华, 姚 珺, 宁汝新. CAD 系统与虚拟装配系统间的信息集成技术研究[J]. 计算机集成制造系统, 2005, 11(1): 44-47.

[6] 卢晓云. 基于VC的Oracle LOB数据库访问技术[J]. 计算机与网络, 2003, 3(3): 129-132.

[7] 罗 丹, 蒋自成, 王跃峰. OpenFlight 模型的OpenGL, 接口研究[C]//2005 全国仿真技术学术会议论文集, 2005: 402-404.

猜你喜欢
二进制多边形纹理
多边形中的“一个角”问题
用二进制解一道高中数学联赛数论题
中等数学(2021年8期)2021-11-22 07:53:38
多边形的艺术
基于BM3D的复杂纹理区域图像去噪
软件(2020年3期)2020-04-20 01:45:18
有趣的进度
解多边形题的转化思想
二进制在竞赛题中的应用
中等数学(2019年4期)2019-08-30 03:51:44
多边形的镶嵌
趣味(数学)(2019年11期)2019-04-13 00:26:32
使用纹理叠加添加艺术画特效
TEXTURE ON TEXTURE质地上的纹理
Coco薇(2017年8期)2017-08-03 15:23:38