HOME> 帮派风云> 三维模型文件格式解读

三维模型文件格式解读

2026-06-16 12:57:37

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

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文件中,相邻的三角面片必须共享两个公共顶点。

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

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

property

property

property

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

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

参考资料

https://zh.wikipedia.org/wiki/STL_(檔案格式)

https://windsong.top/STL与蒙特卡罗/#stl文件

https://zh.wikipedia.org/wiki/PLY

https://en.wikipedia.org/wiki/ISO_10303-21

如何理解STP格式和STL格式?

3D软件格式及转换

i5处理器+960M独显,4000多入手炫龙银魂T1

关闭日版iPhone 6/6 Plus/5S/5C/5的拍照声(改为静音状态)

最新发表 newmodule
友情链接 newmodule