-
基于
VC++
和
OpenGL
的
STL
文件读取
显示
基于<
/p>
VC++
和
OpenGL
的
STL
文件读取显示
p>
摘要:
STL
是三维模型常用的文件格式。
对
STL
文件进行读取和显示,是对模型
进行后续操作的前提。在对
STL
文件格式进行详细分析的基
础上,以
VC+-I-
作为
开发平台;
利用
C++
标准
lO
库的
ifstream
类型定义
对象并绑定
STL
文件;
再用标准
p>
库
string
类型中的
< br>getline
逐行读取绑定的
STL
< br>文件;
最后,
应用
OpenGL
中绘制三
角面片编程技术实现对
STL
文件格式的直观显示。通过试验验证了读取和显示效
果。
关键词
:
STL
文件
ASCII
三维模型
三角面片
OpenGL
1
引言
STL(Stereo lit
hographic)
文件格式是美国
3DSYSTEMS
p>
公司提出的三维实体
造型系统的一个接口标准,其接口格式规范。目
前已被工业界认为是快速成形
(rapid
prototypi
ng)
领域的标
准描述文件格式。在逆向工程、有限元分析、医
学成像系统、文物保护等方面有广泛的应
用川。对
STL
文件的读取与显示是其应
用的基础与前提,本文对
STL
文件特点进行了详细的分析并
在
VC++
平台上。利用
C++
标准库中提供的文件流读取及字符操作等功能结合
OpenGL
中三角面片绘制的
编程技术实现了对
STL<
/p>
文件的读取与显示。
2
STL
文件格式的结构
为了正确地读
取三维模型原始数据。
更好地利用三维图形的知识重现三维模
型
原型,首先必须充分了解三维模型原始数据文件的格式,理解三维数据内部
的组织结构。
STL
文件是一种用许多空间小三角
形面片逼近三维实体表面的数据
模型,
STL
< br>模型的数据通过给出组成三角形法向量的
3
个分量
(
用于确定三角面片
的正反方向
)
及三角形的
3
个顶点坐标
来实现,一个完整的
STL
文件记载了组成实
< br>体模型的所有三角形面片的法向量数据和顶点坐标数据信息。目前的
STL
文件格
式包括二进制文件
(BINARY)<
/p>
和文本文件
(ASCIi)
两种。
2.1
TL
的二进制格式
二进制
STL
文件用固定的字节数来给出三角面片的几何信息。文件起始的
80
个字节是文件头,用于存贮零件名;紧接着用
4
个字节的整数来描述模型的三角
面片个数,
后面逐个给出每个三角面片的几何信息。
每个三角面片占用固定的
50
个字节,
依次是
3<
/p>
个
4
字节浮点数
(
角面片的法矢量
)3
个
4
字节浮点数
(1
个顶点的
坐
标
)3
个
4
字节浮点数
(2
个顶点的坐标
)3
个
4
字节浮点数<
/p>
(3
个顶点的坐标
)
个三角面
片的最后
2
个字节用来描
述三角面片的属性信息。
一个完整二进制
STL
文件的大小
为三角形面片数乘以
50
< br>再加上
84
个字节,总共
1
34
个字节。
2.2 TL
的
ASCII
文件格式
ASCII
码格式的
STL
文件逐行给出三角面片的几何信息,
每一行以
1<
/p>
个或
2
个关
键字
开头。
在
STL
文件中的三角面片的信
息单元
facet
是一个带矢量方向的三角面
< br>片,
STL
三维模型就是由一系列这样的三角面片构成。
整个
STL
文件的首行给出了
文件路径及文件名。
在一个
STL
文件中,
每一个
facet
由
7
行数据组成,
facetnorm
al
是三角面片指向实体外部的法矢量坐标,
outer lo
op
说明随后的
3
行数据分别是
三角面片的
3
个顶点坐标,
< br>3
顶点沿指向实体外部的法矢量方向逆时针排列。
p>
ASCII
格式的
STL
< br>文件结构如下:
solid filename
stl
//文件路径及文件名
facet normal X Y z
//三角面片法向量的
3
个分量值
outer loop
vertex X Y z
//三角面片第一个顶点坐标
vertex X Y Z
//三角面片第二个顶点坐标
vertex X Y Z
//三角面片第三个顶点坐标
end
loop
end facet
//完成一个三角面片定义
end
solid filename stl
//整个
STL
文件定义结束一个具体
STL
文件如下:
p>
solid C
:\
Temp
\
NOEL Parts
\
HMJ
—
PRT
.
STL
created by Ctrl View
V2
.
70
facet
normal 0 1 0
outer loop
vertex 67
.
4752
34
.
7981
31
.
693
vertex
68
.
4358
34
.
7981
30
.
3941
vertex
69
.
1 631
34
.
7981
28
.
951 6
end loop
end facet
通过对
STL<
/p>
两种文件格式的分析可知,二进制格式文件较小
(
通常是
ASC
¨码
格式的
p>
1
/
5)
,
节省文件存储空间,
而
ASCII
码格式的文件可读性更强,
更容易进
行进一步的数
据处理。
3
STL
文件的读取与显示
本文以
p>
STL
三维模型文件为数据源,
根据对文件
格式和内部数据结构的分析,
采用
OpenGL
作为三维图形接口,并以
VC++6
.
O
为开发平台。利用
C++
标
准
IO
库的
if stream
类型定义对象并绑定
STL
文件:再用标准库
string
类型中的
getline
逐
行读取绑定的
STL
文件:然后对读入的数据进行是否为顶点信息的判断,存储其
中的顶点数据。再
应用
OpenGL
编程技术实现对
ST
L
三维模型文件的显示。
读取
STL
文件时,只需要读取
STL
文件中表示向量和三角形顶点的相应数据,
不需要读文件中的其它信息。依
次按逆时针方向读入各个三角形面片的
3
顶点坐
标值。由于三角面片外法矢量可以通过右手螺旋法则由
3
顶点坐标值计算出来,
因此可不对其进行存储,以节省存储空间。如果后续处理需用到
法矢量,
可利用以下的外法矢量计算公式:
(1)
3.1
定义顶点。
STL
< br>三维模型文件由一系列的三角面片组成,每一个三角面片由三维空间中
对应的三个
顶点组成。
STL
文件的读取与显示实质就是对
STL
文件中的顶点信息进
行读取并直观显示,
因此,
读取显示
STL
文件首先要解决的就是顶点的定义问题,
本文通过类
Vert
ex
定义三角面片顶点,
Vertex
类定义的部分代码如下:
class Vertex
{
public
:
Verte
×
(double
—<
/p>
x=0
,
double
< br>—
y=O
,
double
-
-
-
-
-
-
-
-
-
上一篇:数学相关英语单词及各种符号英语
下一篇:NodeXL手册