三维模型文件格式解读

最近接触到三维模型文件,发现格式五花八门的,这里做一个汇总和解读。

STL

简介

STL,全称为STereoLithography,译作:立体光刻,由3D System软件公司创立。但因三角网格形式的其特点,又可以翻译为“标准三角语言(Standard Triangle Language)”,“标准曲面细分语言(Standard Tessellation Language)”。

STL文件使用若干个非结构化的三角网格来记录三维实体信息。在笛卡尔坐标系中,每一个三角网格由三个顶点按照右手定则排序方式构成,同时按照右手定则记录一个与之对应的表面单位法线信息。文件记录的坐标信息是没有尺度的,计量单位为任意的。

文件格式

solid name
facet normal ni nj nk
outer loop
vertex v1x v1y v1z
vertex v2x v2y v2z
vertex v3x v3y v3z
endloop
endfacet
endsolid name

在stl中,允许存在多个实体对象。通过 solid name 和 endsolid name 这一对关键词来描述一个实体对象。其中 name 是实体对象的名称,可以省略,因为通常一个stl文件只存一个实体对象。

solid name
……
endsolid name

在实体对象中,一般存在若干个面片(facet),通过facet 和 endfacet 这一对关键词来描述一个面片。而面片描述信息包括法向量(normal)信息,以及构成面片的三个顶点(vertex)。其中法向量使用 facet normal ,后接 nj nj nk 三个浮点数,表示法向量(\(n_i\), \(n_j\), \(n_k\))。面片的三个顶点通常要成组出现,使用outer loop 和 endloop 这对关键词来分割。顶点的坐标使用vertex来描述,后接v1x v1y v1z 三个浮点数,表示坐标(\(v_{1x},v_{1y},v_{1z}\)) 。

facet normal ni nj nk
outer loop
vertex v1x v1y v1z
vertex v2x v2y v2z
vertex v3x v3y v3z
endloop
endfacet

值得注意的是,在stl文件中,相邻的三角面片必须共享两个公共顶点。

430f22fd17fbf4f2831392fc3efafa1f_stl1

上图左侧这种情形则违反了上述原则,应该表示为右侧这种。

PLY

简介

PLY, 全称为 Polygon file format,即使用多边形来记录三维模型的一种文件格式。其主要存储的是构成面片的多边形顶点三维坐标。可以存储颜色、透明度、表面法向量、材质等信息。

文件格式

 ply
 format ascii 1.0
 comment这是一个正四面体
 element vertex 4
 property float x
 property float y
 property float z
 element face 4
 property list uchar int vertex_index
 end_header
 0 3 0
 2.449 -1.0 -1.414
 0 -1 2.828
 -2.449 -1.0 -1.414
 3 0 1 3
 3 0 2 1
 3 0 3 2
 3 1 2 3

在ply文件中,内容可以分为档头和内容两部分,在档头中描述了当前文件所使用的格式、自定义元素类型和数量等信息。在内容中则根据档头所描述的类型进行数据记录。通常ply分成三部分:

  • 档头
  • 顶点元素列表
  • 面元素列表

首先,以ply作为识别ply文件的标识

ply

然后,声明当前文件格式,以下三种都可以

 format ascii 1.0
 format binary_little_endian 1.0
 format binary_big_endian 1.0

档头还支持一些注解,通过关键词 comment 定义:

comment This is a comment!

接着定义内容区中的元素。格式如下,即先通过element关键词声明元素名称和数量,然后定义元素中各成员变量的类型和名称。

 element <element name> <number in file>
 property <data_type> <property name 1>
 property <data_type> <property name 2>
 property <data_type> <property name 3>

内定的成员变量类型包括:

  • char、uchar
  • short、ushort
  • int、uint
  • float、double
  • list

如,定义一个包含12个顶点的物体,每个顶点使用3个单精度浮点数 (x,y,z)代表点的座标,使用3个unsigned char代表顶点颜色,颜色顺序为 (B, G, R),则档头的写法为:

 element vertex 12
 property float x
 property float y
 property float z
 property uchar blue
 property uchar green
 property uchar red

再如,定义一个具有10个面的物体,写法为:

 element face 10
 property list uchar int vertex_indices

最后结束档头:

end_header

STP

to be continued ……

IGS

OBJ

DXF

参考资料

posted @ 2024-12-02 00:44  GShang  阅读(1041)  评论(0)    收藏  举报