PLY 格式是在 1990 年代由 Greg Turk 和斯坦福图形实验室的其他人开发的,这也是它被称为斯坦福三角格式的原因。自那时起,该文件格式一直保持 1.0 版本,没有进一步的修改。
文件格式
一个简单的 PLY 对象由一组用于表示对象的元素组成。它包含一个顶点列表(由(x,y,z)三元组组成)和一个面列表(实际上是顶点列表的索引)。顶点和面是两种元素的例子,而大多数 PLY 文件主要由这两种元素构成。此外,还可以创建新的属性并将其附加到对象的元素上,这些但属性应以一种不会破坏旧程序的方式添加,以便旧程序在遇到这些新属性时仍能正常运行。读取应用程序也可以忽略这些属性。此外,还可以创建新的元素,并为这些元素定义属性。
PLY 文件格式的文件结构如下:
- 文件头
- 顶点列表
- 面列表
- 其他元素的列表
示例结构
在后续讨论中,我们将使用以下示例来说明 PLY 文件格式的各个部分。
ply
format ascii 1.0 { ascii/binary,格式版本号 }
comment made by Greg Turk { 以 comment 关键字开头的注释 }
comment this file is a cube
element vertex 8 { 定义“顶点”元素,文件中有 8 个 }
property float x { 顶点包含浮点数“x”坐标 }
property float y { y 坐标也是顶点的属性 }
property float z { z 坐标也是 }
element face 6 { 文件中有 6 个“面”元素 }
property list uchar int vertex_index { “vertex_indices” 是一个整数列表 }
end_header { 标记头部的结束 }
0 0 0 { 顶点列表的开始 }
0 0 1
0 1 1
0 1 0
1 0 0
1 0 1
1 1 1
1 1 0
4 0 1 2 3 { 面列表的开始 }
4 7 6 5 4
4 0 4 5 1
4 1 5 6 2
4 2 6 7 3
4 3 7 4 0
文件头
PLY 文件格式的文件头由 ASCII 文本组成,无论是 ASCII 格式还是二进制格式都是如此。头部部分的开始和结束由ply和end_header关键字标识。头部的开始有一个魔术词ply,用于让读取器识别 PLY 文件格式。下一行显示了该文件的版本号。PLY 文件格式中的注释以comment关键字开头。
元素关键字
element关键字用于说明文件中包含的内容。它后面是该特定元素类型的属性,每个属性都有其类型和顺序,如下所示:
element vertex 8 { 定义“顶点”元素,文件中有 8 个 }
property float x { 顶包含点浮点数“x”坐标 }
property float y { y 坐标也是顶点的属性 }
property float z { z 坐标也是 }
在这个特定的例子中,顶点元素有 3 个属性,类型为浮点数,顺序已指定。
数据类型
属性可能有两种数据类型: 标量:标量数据类型如下表所示:
| 名称 | 类型 | 字节数 |
|---|---|---|
| char | 字符 | 1 |
| uchar | 无符号字符 | 1 |
| short | 短整数 | 2 |
| ushort | 无符号短整数 | 2 |
| int | 整数 | 4 |
| uint | 无符号整数 | 4 |
| float | 单精度浮点数 | 4 |
| double | 双精度浮点数 | 8 |
| 列表:还有一种特殊的属性定义形式,使用列表数据类型。例如,上面立方体文件中的: |
property list uchar int vertex_index
这意味着属性vertex_index包含一个无符号字符,表示该属性包含的索引数量,后面跟着一个整数列表,列表长度等于该数量。这个可变长度列表中的每个整数都是一个顶点的索引。
例子文件
下图是一个ply格式保存的块体模型例子,顶点附有颜色属性。macOS系统可以使用预览程序直接查看,其他系统可以使用paraview或者meshlab等软件查看。
