PLY 格式是在 1990 年代由 Greg Turk 和斯坦福图形实验室的其他人开发的,这也是它被称为斯坦福三角格式的原因。自那时起,该文件格式一直保持 1.0 版本,没有进一步的修改。

文件格式

一个简单的 PLY 对象由一组用于表示对象的元素组成。它包含一个顶点列表(由(x,y,z)三元组组成)和一个面列表(实际上是顶点列表的索引)。顶点和面是两种元素的例子,而大多数 PLY 文件主要由这两种元素构成。此外,还可以创建新的属性并将其附加到对象的元素上,这些但属性应以一种不会破坏旧程序的方式添加,以便旧程序在遇到这些新属性时仍能正常运行。读取应用程序也可以忽略这些属性。此外,还可以创建新的元素,并为这些元素定义属性。

PLY 文件格式的文件结构如下:

  1. 文件头
  2. 顶点列表
  3. 面列表
  4. 其他元素的列表

示例结构

在后续讨论中,我们将使用以下示例来说明 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 格式还是二进制格式都是如此。头部部分的开始和结束由plyend_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等软件查看。

图片无法显示
ply格式块体模型(附带顶点颜色)

点击打开顶点数据模型快体数据模型

程序读写

C++程序读写