APP下载

基于OpenGL的STL文件三维模型真实感图形可视化研究

2011-07-10任清海

制造业自动化 2011年16期
关键词:面片二进制字节

耿 铁,任清海

(河南工业大学 机电工程学院,郑州 450007)

0 引言

STL(Stereo lithographic)文件格式是美国3D SYSTEMS公司提出的一种采用三角形面片离散地近似表示三维模型的接口标准,由于其接口格式规范、对三维实体描述的解释唯一,目前已成为CAD/CAM/CAE系统接口的工业标准之一。因而STL文件在三维CAD设计、逆向工程、有限元分析、医学成像系统、文物保护等方面有广泛的应用[1]。

OpenGL(Open Graphic Library)是一个三维真实感图形模型库,被广泛地运用于科学计算可视化、计算机动画和虚拟现实等领域,利用OpenGL开发图形软件已成为当今业界的时尚[2]。

为了获得STL文件三维模型的真实感显示,以更好地进行气体辅助注塑成型数值模拟后置处理的研究与开发,本文在深入研究STL文件特点的基础上,运用VC++6.0环境下的MFC的串行化文件I/O操作机制和OpenGL强大的图形绘制渲染功能,对STL文件三维模型真实感图形可视化进行了研究与实现。

1 STL文件的数据组织格式

STL 文件是由若干空间无序排列组合的、并没有反映拓扑关系的小三角形面片组成的集合,是一种用许多空间小三角形面片逼近三维实体表面的数据模型,每个三角形面片由三角形的三个顶点坐标和指向模型外部的三角形面片的法向量组成[3]。目前的STL文件格式包括二进制文件(BINARY)和文本文件(ASCII)两种[4]。

1.1 STL的二进制格式

二进制STL文件用固定的字节数来给出三角形面片的几何信息[4]。文件起始的80个字节是文件头,用于存贮零件名等文字信息,接着用4个字节的整数来描述模型的三角形面片个数, 后面逐个给出每个三角形面片的几何信息。每个三角形面片占用固定的50个字节,依次是3个4字节浮点数,用来描述三角形面片的法矢量;3个4字节浮点数,用来描述第1个顶点的坐标;3个4字节浮点数,用来描述第2个顶点的坐标;3个4字节浮点数,用来描述第3个顶点的坐标,每个三角形面片的最后2个字节用来描述三角形面片的属性信息(包括颜色属性等),暂时没有用。一个二进制STL文件的大小为三角形面片数乘以50再加上84个字节。

1.2 STL的ASCII文件格式

ASCII码格式的文件逐行给出三角形面片的几何信息,每一行以1个或2个关键字开头。在STL文件中的三角形面片的信息单元facet是一个带矢量方向的三角形面片,STL三维模型就是由一系列这样的三角形面片构成。STL文件的首行给出了文件路径及文件名。在一个STL文件中,每一个facet由7行数据组成,第一行是三角形面片指向实体外部的法矢量坐标,由facet normal开头,第二行为outer loop关键字,随后的第3、4、5行数据分别是三角形面片的个顶点坐标,分别以vertex关键字开头,3顶点沿指向实体外部的法矢量方向逆时针排列[5],第六行为end loop关键字,第七行为endfacet关键字,表示一个三角形面片信息描述完毕。

通过对STL两种文件格式的分析可知,其中二进制的文件格式较小,节省文件存储空间,而ASCII码格式的文件可读性较强,故把这种格式作为可视化研究对象。

2 STL文件的读取和显示

2.1 定义STL文件相关数据结构

STL文件型由一系列三角形面片构成,即三角形面片是构成STL文件的基本单位。每个三角形面片又由三维空间中对应的三个顶点坐标及其构成的平面的法向矢量组成。所以采用结构型变量分别定义构成三角形面片的顶点数据和法向量,并采用基类CObject的派生类CTriangleClass定义的m_TriangleList数组来实现动态存储构成STL文件的三角形面片。

2.2 读取STL文件数据

MFC提供了一种串行化方式(Serialize)存取文档机制,可以方便地把对象的不同数据信息存储到指定的二进制文件中,也可以方便地以同样顺序从该二进制文件中读出数据并创建对象[6]。具体算法如下:

2.3 STL文件的真实感图形可视化显示

在OpenGL中,光照模型由环境反射光、漫反射光、镜面反射光等组成,通过函数glLight对光源特性进行设置,可以模拟真实的光照效果;材质属性是通过对光线中的红、绿、蓝三原色的反射率来近似定义的,可以采用函数glMaterial实现材质的设置;OpenGL提供的Gouraud着色模式,实现了在顶点颜色之间进行双线性差值,使不同顶点之间的颜色光滑连续,可以改进显示效果;在OpenGL中,还可以采用融合技术,实现三维模型的透明处理;另外OpenGL还可以启动深度检测功能,进行消隐处理,提高三维模型的立体感[7]。通过使用光照模型、材质属性、着色模式、深度检测、融合以及反走样等技术可以实现三维模型的真实感显示效果。具体算法如下:

3 结束语

在Visual C++6.0环境下,运用MFC的串行化文件I/O操作机制和OpenGL函数库对STL文件的三维模型的真实感图形可视化进行了研究,并且详细介绍了STL文件的读取和显示方法,为后续的气体辅助注塑成型数值模拟后置处理的研程序结果如图1所示。究与开发提供了条件,具有一定的使用价值和应用前景。

[1] 卫炜, 周来水, 张丽艳.海量STL文件的快速读取与显示[J].机械科学与技术, 2006, 25(8): 935-938.

[2] 程小茁, 刘金义, 吴涛.基于OpenGL的STL格式实真实感图形显示工具的实现[J].抚顺石油学院学报, 1999,19(3): 53-55.

[3] 胡海鸥, 王素.基于OpenGL的STL文件可视化研究[OL].中国科技论文在线, 2010, 3(4): 371-376.http://highlights.paper.edu.cn/page_detail.php? id=910

[4] 严桔铭, 钟艳如.基于VC++和OpenGL的STL文件读取显示[J].计算机体系应用, 2009, 3: 172-175.

[5] 纪峰, 陈荔, 李占利.基于STL文件的模型及应用[J].长安大学学报, 2006, 26(1): 104-107.

[6] 王清辉, 王彪.Visual C++ CAD应用程序开发技术[M].北京: 机械工业出版社.2003.

[7] 和克智, 等.OpenGL编程技术详解[M].北京: 化学工业出版社.2010.

[8] 郭兆荣.Visual C++ OpenGL 应用程序开发[M].北京: 人民邮电出版社, 2006.

猜你喜欢

面片二进制字节
用二进制解一道高中数学联赛数论题
No.8 字节跳动将推出独立出口电商APP
三维模型有向三角面片链码压缩方法
有趣的进度
初次来压期间不同顶板对工作面片帮影响研究
二进制在竞赛题中的应用
No.10 “字节跳动手机”要来了?
基于MSP430的四旋翼飞行器的S-BUS通信协议的设计与实现
甜面片里的人生
二进制宽带毫米波合成器设计与分析