基于STL文件的三维模型可视化研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#pragma comment(1ib。”open9132.1ib”) #pragma comment(1ib,”glul32.Iib”) #pragma comment(1ib,”glaux.1ib”)
3.2 0penGL绘图环境的初始化及环境变量释放 在绘图之前还需要在视图类中添加消息wM—CRE—
//恢复坐标系 glMatrixMode(GL—PROJECTION),//设置变换模 式为投影变换
矩阵
gll,oadldentity();//初始化投影变换矩阵 if(ex<=ey)//根据窗口大小设置调整正射投影
glOrtho(一nRange,nRange。一nRange*ey/cx。 nRange’cy/cx,一nRange*55.Of,nRange*55.Of);
使用glBegin()甬数并以GI,一TRIANGLES为参数,以实体 模式依次画出每个面片的三个顶点及法矢,这样就可以把整 个模型给绘制出来了。同时,通过响应工具栏按钮和鼠标按 键的动作确定模型的旋转、移动和缩放等交互式操作的参数 值,并在绘图部分利用glRotatef()、glScalef()和glTranslatef ()函数实现模型的旋转、缩放和平移。
ATE的响应函数OnCreate()。创建着色上下文、重新设置像 素格式、设备清除背景色、光源属性、材质属性、深度测试方 式等初始化工作。这样就能以()penGL的格式方式进行绘
万方数据
2008年第6期
王增波:基于STI。文件的三维模型可视化研究
17
图了。 当然,在程序退出时,需要清空当前使用的着色上下文,
下面是绘制模型所有i角面片的部分代码: glTranslatef(m—xTrans.m—yTrans。m—zTrans)I//进 行平移操作 glRotatef(m—xRotate,1,0,O);//绕x轴旋转 glRotatef(m_yRotate,0,l,0);//绕Y轴旋转 glRotatef(m_zRotate,0,0,1);//绕Z轴旋转 glScalef(1arge。large,large); //缩放large倍 glColor3f(1.0,1.0,1.O);//设置绘图颜色 for(int i一0;i<m—triangle.size();i++)//对模型的 所有面片进行绘制 {
CFile。file=new CFile(); char PathName[255];
bool m—stb=false;
file一>()pen(PathName,Cfile::modeRead)f dwFileLen—file~>GetLength(): file一>Seek(80,CFile::begin); file一>Read(8.dwNum,4); if((80+4+dwNum*50)一一dwFileLen)//测试是否 是二进制的STI,文件
表l STL文件二进制格式
文件 头
面片 数
一个面片(50字节)
其它 面片
字节
80 数

3×4
3×4
3×4
3×4

数据 字符串 整数型 浮点型 浮点型 浮点型 浮点型
类翟
存储 信息
文字 信息
顶点1 顶点2 顶点3
面片数 法矢量
属性
世标
坐标 乍标
在读取文件时我们可以利用C++的CFile类的Open ()和Close()函数实现打开和关闭文件,使用Seek()和Read ()函数来读取文件头信息,判断当前的STL文件是否二进 制文件,以确定以何种方式读取数据。这部分程序代码为:
void CVirtualOrthoView::OnSize(UlNT nType,int ex, int cy)

CView::OnSize(nType,ex,cy);
//添加窗口缩放时的图形变换函数
if(cy==O) cy一1;
glViewport(0,0,ex,cy);
GLfloat nRange=80.Of;
else glOrtho(一nRange*cx/cy,nRange*cy/cx,一
nRange,nRange,一nRange*55.Of。nRange*55.Of):
glMatrixMode(GL-M()DELVIEW);//设置变换模 式为模型变换
glLoadldentity();//初始化模型变换矩阵 } 3.4 openGl。绘制图形 在OpenGL中,最基本的图形是点(顶点),任何其他的 网形都是由顶点的集合来描述的,顶点问是否或怎样连接是 由绘制图形的类型决定的㈨。我们就按照三角面片的顺序,
对这些3D图形数据的存储依据对其处理的三维造型 软件不同有许多不同的存储格式,目前主流的i维造型软件 都支持多种标准文件格式,其中STI。(Stereo lithography)格 式文件是一种可读性较强的文件格式。STL文件格式最早 是作为快速成型领域中的接口标准,已被广泛应用于各种=三 维软件中,很多主流的商用三维软件都支持STI。文件的输 入输出[3]。STL格式文件用三角网格面表示具有复杂拓扑 和外形的几何模型,在快速成型、图形真实感显示、有限元分
2 STL文件的读取与处理
STL格式文件的内容就是记录模型巾每个三角形(三 角面片)的几何信息,包括三角形所在平面的法矢和它所包 含的3个顶点的坐标。在具体表示上,它又分为ASCⅡ码和 二进制两种格式。
ASCII码格式逐行给出三角面片的几何信息。每一行 以一个或两个关键字开头,关键字的排列顺序以及关键后面 的数据内容如下:
在单文档中绘制()penGL图形比较简单,其主要步骤与 关键技术是:
(1)在单文档窗口的创建过程巾,设置好显示的像素格 式,并按OpenGI。的要求设置好窗口的属性和风格;
(2)首先获得Windows设备描述表,然后将其与事先设 置好的0penGL绘制描述表联系起来;
(3)调用0penGL命令进行图形绘制; (4)退出OpenGI。图形窗口时,释放()penGL绘制描述 表RC和Windows设备描述表DC。 下面具体从四个方面进行说明。 3.1 引入OpenGL绘图环境 实现OpenGl。的绘图和其它基于MFC的应用程序一 样,只是在连接的时候要在视网类源文件中加入OpenGl,的 三个静态库——open9132.1ib、glu32.1ib和glaux.1ib,这样 就可以在程序使用OpenGI。中的各种绘图函数了,下面的代 码就是一种连接OpenGL三个静态库的简单方式。 #include<gl/91.h> #include<gl/glu.h> #include<gl/glaux.h>
vector。实现数据的动态高效地存取。对于每一个面片信息 使用自己定义的一个向量类sVeetor,在该类中不仅可以存 取三维顶点或法向量的xyz轴的分量值。还对运算符进行了 重载.方便实现向量问的赋值、相等,加减、点乘和叉乘等运 算。为后面的丁二作提供了极大的便利。最后.把顶点和法矢 向量的值保存到结构体FaceStruet中,该结构体定义如下:
l引 言
现代的数据可视化技术指的是运用计算机图形学和图 像处理技术。将数据转换为图形或图像在屏幕上显示出来, 并进行交互处理的理论、方法和技术。这些数据可以借助遥 感、CT(计算机断层扫描)、RP(Rapid Prototyping)快速成型 等手段得到。并能利用计算机对这些数据进行处理和显示, 实现真实地模拟显示自然景象H]。其中特别是对三维数据 的可视化具有更重大的意义。在许多情形中,3D图形对现 实生活中那些昂贵的、危险的或者不可能的情形提供了非常 有效的替代。最精彩的例子就是飞行模拟和医疗成像。它 是对三维空间中的采样。表示了一个三维空间内部的详细信 息[2]。人们可以通过可视化手段在计算机中对这些现实中 难以接触到或深入了解的实体进行模拟重现,并实现对其交 互式的可视化查询.使人们能以更直观和客观的方式发现隐 藏在数据中的科学规律。
m—stb=true;//--进制文件 ’ file一>Close();
delete file;
程序后面将通过判断布尔型变量m—stb的值确实该文 件的类型。针对文本文件使用fgets()函数读取一行数据, 再利用sseanf()函数从该行数据中截取出数字部分。针对 二进制文件使用Read()函数读取相应字节的数据。由于文 本文件中没有说明面片的个数,所以利用动态数组来存取面 片的数据.在这里我统一选择了C++标准库中的容器类
第29卷第6期 2 0 0 8年1 2月
Fra Baidu bibliotek
衡阳师范学院学报 Journal of Hengyang Normal University
No.6V01.29 Dee.2 0 0 8
基于STL文件的三维模型可视化研究
王增波
(衡阳师范学院数学系,湖南街阳421008)
摘 要:在快速成型技术中。基于STL文件的数据模型可视化的实现有着非常重要的作用。文章提出了生成可
析和逆向工程等方面已得到广泛应用。 国内外几乎所有的快速成型系统都以STL文件为其数
据输入格式-]。STL数据模型可视化的实现是RP加工中 一个重要的环节。在CAD系统将实体模型转换成STL数 据格式的过程中,经常会出现对三维零件描述的缺陷H]。模 型可视化功能的实现能够有助于对STL文件进行诊断,通 过对模型的三维动态观察和结构分析,可以方便的查找出缺 陷所在,并进而对其进行修复。本文的研究就是基于STL 格式文件的基础上。利用VC++6.0开发环境和OpenGL 技术实现三维数字模型的可视化。
struet FaceStruct//一个三角面片的结构 {
sVeetor Normal;//法向量 sVector vl,v2,v3;//三顶点从标 };
3模型的绘制及显示
()penGL是一种非常直观的编程环境,它提供的一系列 函数大大地简化了彳维网形程序。例如。OpenGI。提供一系 列的三维图形单元、图形变换函数和外部设备访问函数,使 开发者可以方便地通过鼠标、键盘、空间球、数据手套等手段 实现i=维图形的显示和交互。在程序开发过程中我们使用 MFC编写单文档应用程序并利用OpenGL的三维绘图功能 实现STL文件模型的可视化。
视化的STI。三维实体模型的方法,采用Visual C++为编程语言,以OpenGL为图形开发工具,开发出一个基
于STL文件的数据模型的可视化系统,该系统为STI。文件模型的后续处理提供了有力的支持。

关键词:可视化;STL丈件;OpenGL
中图分类号:TP391.9
文献标识码:A
文章编号:1673--0313(2008)06一0015一04
万方数据
16
衡阳师范学院学报
2008年第29卷
vertex<第3个顶点坐标>
endloop endfaeet
facet normal<第2个三角面片的法矢量>
endfacet
endsolid
二进制格式的STL文件是用同定的字节数来给出=三角 面片的几何信息。文件的起始80字节是文件头,可以放入 任何文字信息。紧随着的4字节整数用来描述实体的i角 面片个数。后面的内容就是逐个给出每个三角面片的几何 信息。每个三角面片占用固定的50字节:3个4字节浮点 数用来描述三角面片的法矢量。3个4字节浮点数用来描述 第1个顶点的坐标,3个4字节浮点数用来描述第2个顶点 的坐标,3个4字节浮点数用来描述第3个顶点的坐标,每 个i角面片的最后2字节用来描述三角面片的属性信息(暂 时没有用),如表1所示。
solid<实体名> facet normal<第1个三角面片的法矢量>
outer loop
vertex<第1个顶点坐标> vertex<第2个顶点坐标>
收稿日期:2008一04一Ol 基金项目:湖南省教育厅科研计划青年项目(0713009);衡阳师范学院科学基金青年项目(07A16) 作者简介:王增波(1975一),男,湖南衡阳人,衡阳师范学院数学系教师,硕士,主要研究领域为计算机图形学.
并删除所创建的着色上下文。这可以在视图类中添加消息 wM—DESDROY的响应甬数OnDestroy(),在函数巾释放相 关的环境变量内存。 3.3 根据窗口大小设置场景
在屏幕窗口内可以定义一个矩形。称为视口(Viewport) 视景投影后的图形就在视口内显示。在MFC应用程序中, 窗口的位置及大小的改变都会激发一个wM—SIZE消息,该 消息会在视图类的消息响应函数OnSize()巾被执行,因此在 消息响应函数OnSize()中应该添加响应的处理,根据窗口大 小设置场景。我们可以通过glViewport()函数重新设置视 口,并且可以使用gl()rtho()函数对图形进行正交投影。代 码如下:
相关文档
最新文档