STL文件读取显示与操作
2011-02-06肖任贤张军舰冯浩潘海鹏
肖任贤 张军舰 冯浩 潘海鹏
(景德镇陶瓷学院机电工程学院,江西景德镇333403)
0 引言
目前,机器人施釉已经在陶瓷领域有所应用,然而,在施釉作业中,施釉机器人喷枪运动轨迹的生产一直是制约施釉机器人广泛应用的瓶颈。为了生成施釉机器人的喷枪轨迹,我们提出了基于STL模型生成施釉机器人喷枪轨迹的方法,使得离线编程系统可以有效利用各种数据格式的工件CAD模型规划施釉机器人的喷枪轨迹。本文先对STL模型进行读取、显示,在此基础上通过调用OpenGL平移、旋转函数对已读出的STL模型进行校正,较直接对其进行坐标平移、旋转变换省去了繁琐的矩阵运算,提高了效率,便于对STL模型进行切片,使施釉机器人的离线编程系统能根据工件模型生成正确的喷枪轨迹。
STL文件是若干个空间小三角形面片的集合,它是通过三维实体模型的三角网格化获得的。每个三角形面片由三角形三个顶点坐标(xi,yi,zi)(其中i=1, 2,3)和其指向模型外部的法向量{n1,n2,n3}组成;其法向量{n1,n2,n3}与三角形三个顶点(xi,yi,zi)满足右手定则:即右手环握三角形,四指指向三角形顶点的排序方向,则拇指所指方向即为该三角形面片的法矢量方向。根据数据存储方式的不同,STL文件可分为ASCII码和二进制码两种存储方式。与ASCII格式文件相比,二进制文件要小得多,大约是ASCII格式文件的1/5,兼于ASCII格式文件可以读取,便于测试,故选用其作为可视化的研究对象。
为了能够正确地读取STL模型的原始数据,更好地利用OpenGL技术将三维图形显示出来,并实现对其操作,我们在充分了解STL文件的基础上,还必须理解它的结构。
现在我们已经知道,ASCII码格式的STL文件是逐行给出三角形面片的几何信息的,其每一行都以一些关键字开头。一般地,一个ASCII码形式的STL文件格式如下所示:
OpenGL是一个功能非常强大的三维图形应用程序编程接口(Applicantion Program Interfer,API),它是以美国SGI公司的IRIS GL三维图形库为基础制定的一个通用的开放的三维图形标准。其包括超过700个函数,这些函数可以用于指定物体和操作,用于创建交互式的三维应用程序等。
本文以STL格式文件为数据源,根据文件格式以及内部数据结构的分析,采用OpenGL作为三维图形接口,并以VC++标准IO库的ifstream类型定义对象,并绑定在STL文件上,再利用标准string类型中的get line逐行读取绑定的STL文件;最后对读入的数据进行是否为顶点信息的判断,存储其中的顶点数据。再应用OpenGL编程技术实现对STL格式文件的显示。
对STL文件的具体读取算法如下:
Step1.定义一个临时的三角形T。
Step2.依次读取上述数据结构中一个facet段,将normal和三个vertex分别存于三角形T的法向量和定点中。
Step3.创建一个三角形链表l,在l中添加T。
Step4.判断STL文件是否读取完,是,则转至Step5,否,则转至Step2。
Step5.读取结束。
STL文件在经过上述读取后,要求读取结果以三维图形的形式显示出来。在OpenGL函数库中,提供了丰富的函数,用于绘制几何模型,提供了直接渲染三角形面片的函数glBegin(GL_TRIANGLES)和glEnd(),因而,利用OpenGL实现STL三维模型真实感图形显示更具有优势。
部分程序如下:
由CAD模型转换而来的STL模型所包含的坐标系是在CAD系统构建模型时设定的(称其为模型坐标系),在很大程度上有可能和施釉机器人工作台坐标系(称其为任务坐标系)不一致。因此需要离线编程系统在读取STL模型后对其坐标系进行校正,使得模型坐标系与任务坐标系重合,使离线编程系统能根据坯体模型生成正确的喷枪轨迹。针对坯体来说,要实现STL模型的校正,通常使用的坐标变换为平移和旋转。对待施釉工件几何模型的变换实际上是以点的变换为基础的,即对模型对象一系列的顶点进行变换后,用新的顶点来生成变换后的模型。在一些文献中用的该校正方法,其中要进行大量的矩阵运算,给程序的调试与运行带来了一定的困难。然而在OpenGL的平移和旋转函数中封装了坐标变换,可直接对其进行调用,因此省去了繁琐的矩阵运算,提高了效率。本文即是通过调用OpenGL的平移和旋转函数来实现STL模型校正的。
部分程序如下:
根据用户设置的平移、旋转参数,在绘图虚函数中调用平移旋转函数如下:
4 实例
图2 S T L模型的平移Fig.2 Translating an STL model
图3 S T L模型的旋转Fig.3 Rotating an STL model
在对STL文件进行分析的基础上,利用VC++6. 0,OpenGL编程技术对STL文件进行可视化验证。对从ProE5.0中导出的STL文件进行测试,如图1所示STL文件的读取与显示。
在此基础上可实现对已显示的STL文件进行定向定量平移与旋转,操作对话框如图2、图3所示,分别是对已显示的STL模型的平移与旋转的对话框,输入预定的数据可实现对STL模型的平移与旋转操作。
从图2、图3可见,通过调用OpenGL平移、旋转函数更容易实现对STL模型的校正,而且不需要对矩阵考虑矩阵运算和坐标平移程序的编写。
5 结论
本文以VC++6.0为数据开发平台,结合OpenGL编程技术实现对STL文件的读取与显示功能,并以此为基础通过调用OpenGL的平移、旋转函数对STL模型的校正,使得模型坐标系与任务坐标系重合,为STL模型切片做好准备,使施釉机器人的离线编程系统能根据STL模型的切片生成正确的喷枪轨迹。
1卫炜,周来水,张艳丽.海量STL文件的快速读取与显示.机械科学与技术.2006,8
2胡海鸥,王素.基于OpenGL的STL文件可视化研究.中国科技论文在线,2010,2
3严桎铭,钟艳如.基于VC++和OPpenGL的STL文件显示.计算机系统应用,2009,3
4陈挺,俞子荣.基于OpenGL技术的STL数据格式的显示.计算机与自动化,2009,9
5张贞贞,陈定方.基于VC的STL文件读取.湖北工业大学学报,2008,4
6赵启升.基于OpenGL三维物体建模方法的研究与实现.电子技术论坛
7闫涛.基于三角网格交互式数据分割技术的研究与实现.硕士学位论文,2009届
8周峰.喷涂机器人喷枪空间轨迹生成研究.硕士学位论文, 2009届
9孙波.OpenGL编程实例学习教程.北京:北京大学出版社
10孙鹏.Visual C++6.0完全自学手册.北京:机械工业出版社