参考资料

https://github.com/ddiakopoulos/tinyply
http://paulbourke.net/dataformats/ply/


PLY文件介绍

1 PLY文件基本格式

PLY是计算机图形学中一个常用的格式,主要用于保存多边形(通常是三角形),一般有ASCII保存方式和二进制保存方式两种,其中后者的读写效率更佳。下图展示了一个PLY文件中保存的多个三角形。
在这里插入图片描述

在PLY文件中,最主要的属性是顶点、三角面以及一些其他的附带属性(法向、颜色等等)。同时,为了保证PLY文件不至于过于复杂,PLY并不考虑材质、参数化等等特殊属性,不具备用于图形学高级渲染的功能。除此之外,PLY文件还包括文件头,其中会存储一些文件说明等等信息,后续会有更详细的介绍。
如下是一个基本PLY(仅包含顶点和三角面)的格式规范:

Header //文件头,记录文件的属性信息
Vertex List  // 顶点坐标值,通常一个顶点一行,分别是xyz
Face List // 面的顶点数量,以及对应的顶点编号
(lists of other elements)

针对上述的格式规范,以下给出一个简单的PLY文件示例,及其在meshlab下的渲染结果(其中红色是顶点,绿色边围成的是四面体)。

ply
format ascii 1.0         
comment made by Greg Turk  
comment this file is a cube
element vertex 12         
property float x           
property float y         
property float z         
element face 10            
property list uchar int vertex_index            
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
1.1 1.1 0
2.1 1.1 0
1.1 2.1 0
1.1 1.1 1
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
3 8 9 10
3 8 9 11
3 8 10 11
3 9 10 11

在这里插入图片描述

2 PLY文件说明

此处对ply文件做一些简要的注释说明。

// 此字符串是PLY文件第一行的固定字符,表明此文件为PLY文件,可以称之为“钥匙”
ply
// format用于约定PLY文件的格式,有ASCII和binary两种,后续数字为版本号
format ascii 1.0  
// comment用于在PLY文件中写一些无关痛痒的说明
// 比如谁创建的文件啊,文件大致内容啊,等等之类的,但是对文件读写没有影响         
comment made by Greg Turk  
comment this file is a cube
// element 为PLY文件的核心内容头文件
// 此处声明ply有 8个vertex
element vertex 8 
// element下的property为vertex的属性,此处有 x y z三种属性,且都是float类型         
property float x         
property float y         
property float z 
// 此处声明ply有 6个face
element face 10
// property list表明element中一个数据具有多个属性,其后的第一个uchar表示list的长度
// int vertex_index 表示的是list里存储的是vertex的编号
property list uchar int vertex_index 
// 文件头结尾的标志符
end_header    
// 文件头结束后存储的是顶点,一行一个顶点,分别是xyz       
0 0 0                     
0 0 1
0 1 1
0 1 0
1 0 0
1 0 1
1 1 1
1 1 0
// 按照文件头的顺序,存储在顶点后的数据是面
// 第一个数据是面上的顶点数量,后边的数据都是顶点的id
// 此处第一种类型的面是四边形,所以第一个数字是4,后边是点的编号
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
// 此处第二种类型的面是三角形,所以第一个数字是3,后边是点的编号
3 8 9 10
3 8 9 11
3 8 10 11
3 9 10 11
2 PLY文件+顶点颜色

为了让结果更好看,可以给顶点加上颜色,其ply文件和meshlab渲染结果如下

ply
format ascii 1.0         
comment made by Greg Turk  
comment this file is a cube
element vertex 12         
property float x           
property float y         
property float z       
property uchar red            
property uchar green
property uchar blue  
element face 10            
property list uchar int vertex_index            
end_header                 
0 0 0  255 0 0                    
0 0 1 0 255 0
0 1 1 0 255 0
0 1 0 255 0 0
1 0 0 255 0 0
1 0 1 0 255 0
1 1 1 0 255 0
1 1 0 255 0 0
1.1 1.1 0 255 0 0
2.1 1.1 0 255 0 0
1.1 2.1 0 255 0 0
1.1 1.1 1 0 255 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
3 8 9 10
3 8 9 11
3 8 10 11
3 9 10 11

在这里插入图片描述


结语

简单总结一下ply文件,ply文件最为经典的C/C++读写库是tinyply此处并不想过多介绍。
同时也发现,ply文件对很多特殊结构支持并不好,例如 非规则多边形和三维线段。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐