最近写论文为了使三维重建结果呈现的更加漂亮直观一些,尝试对三维空间数据进行表面重建,采用Poisson Reconstruction(
点击打开链接
)方法,该方法使用的数据格式为ply格式。
Ply格式是Stanford(Stanford Bunny
)开发的一套三维mesh模型数据格式,图形学领域内很多著名的模型数据,比如Stanford的三维扫描数据库(其中包括很多文章中会见到的Happy Buddha、Dragon、Bunny兔子),Geogia Tech的大型几何模型库,北卡(UNC)的电厂模型等,最初的模型都是基于这个格式的。
PLY多边形文件格式的开发目标是建立一套针对多边形模型的,结构简单但是能够满足大多数图形应用需要的模型格式,而且它允许以ASCII码格式或二进制形式存储文件。
PLY作为一种多边形模型数据格式,不同于三维引擎中常用的场景图文件格式和脚本文件,每个PLY文件只用于描述一个多边形模型对象(Object),该模型对象可以通过诸如顶点、面等数据进行描述,每一类这样的数据被称作一种元素(Element)。
PLY的文件结构同样很简单:文件头加上元素数据列表。其中文件头中以行为单位描述文件类型、格式与版本、元素类型、元素的属性等,然后就根据在文件头中所列出元素类型的顺序及其属性,依次记录各个元素的属性数据。
先来了解一下ply数据格式的具体形式:
头部
顶点列表
面片列表
(其他元素列表)
顶点列表
面片列表
(其他元素列表)
头部描述ply文件的组织形式,包含文件的数据格式是ascii还是二进制格式;
然后是文件的一个声明(版权,制作人,数据表达的内容等等);
再后是对每个元素类型的描述,如元素名 element vertex 8,表示元素类型是顶点,数量是8;
接下来是对顶点属性的描述,如 property float32 x ,表示顶点中包含浮点数x的坐标;
如有其它元素以此列下。
一般元素以下面的格式描述:
element <元素名> <在文件中的个数>
property <数据类型> <属性名-1>
property <数据类型> <属性名-2>
property <数据类型> <属性名-3>
element <元素名> <在文件中的个数>
property <数据类型> <属性名-1>
property <数据类型> <属性名-2>
property <数据类型> <属性名-3>
下载PLY格式的相关代码中会有一个ply的例子,
ply
format ascii 1.0 { 数据格式, ascii/二进制 }
comment made by anonymous { comment表示注释,附加信息 }
comment this file is a cube
element vertex 8 { element表示ply中的元素是点、面、还是其它, 定义“vertex”(顶点)元素,在文件中有8个 }
property float32 x { property表示元素的属性,顶点包含浮点坐标“x”}
property float32 y { y 坐标同样是一个顶点属性 }
property float32 z { z 也是坐标 }
element face 6 { ply中的第二个element 在文件里有6个“face”(面片) }
property list uint8 int32 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
format ascii 1.0 { 数据格式, ascii/二进制 }
comment made by anonymous { comment表示注释,附加信息 }
comment this file is a cube
element vertex 8 { element表示ply中的元素是点、面、还是其它, 定义“vertex”(顶点)元素,在文件中有8个 }
property float32 x { property表示元素的属性,顶点包含浮点坐标“x”}
property float32 y { y 坐标同样是一个顶点属性 }
property float32 z { z 也是坐标 }
element face 6 { ply中的第二个element 在文件里有6个“face”(面片) }
property list uint8 int32 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
参考文献: