(以下为网络资源总结,请对号入座)
Ply文件格式是Stanford大学开发的一套三维mesh模型数据格式,Stanford的三维数据库中Happy Buddha、Dragon、Bunny兔子最初都是基于这个格式的,PLY 是一种电脑档案格式,全名为 多边形档案(Polygon File Format) 或 Stanford Triangle Format。 该格式主要用以储存立体扫描结果的三维数值,透过多边形片面的集合描述三维物体,与其他格式相较之下这是较为简单的方法。它可以储存的资讯包含颜色、透明度、表面法向量、材质坐标与资料可性度,并能对多边形的正反两面设定不同的属性。在档案内容的储存上 PLY 有两种版本,分别是纯文字(ASCII)版本与二元码(binary)版本,其差异在储存时是否以 ASCII 编码表示元素资讯。
PLY的文件结构:文件头加上元素数据列表。其中文件头中以行为单位描述文件类型、格式与版本、元素类型、元素的属性等,然后就根据在文件头中所列出元素类型的顺序及其属性,依次记录各个元素的属性数据。
PLY档案以PLY单独为一行开始,接着一行为版本资讯,目前有三种写法:
ormat ascii 1.0 format
binary_little_endian 1.0 format
binary_big_endian 1.0
其中 ascii, binary_little_endian, binary_big_endian 是档案储存的编码方式,而 1.0 是遵循的标准版本。
在标头中可使用 'comment' 作为一行的开头以编写注解,在元素的数量定义上可使用 'element' 关键字。举例而言,若一个档案包含 12 个端点,则档头必须包含:element vertex 12 vertex 是内定的元素类型。
对于元素的属性定义方式,PLY允许单一属性定义:
property <data-type> <property-name-1>
以及列表属性方式:
property list <numerical-type> <numerical-type> <property-name>
其中第一个数据类型描述列表元素数量,第二个数据类型描述每个列表元素。
属性可能具有的数据类型有char uchar short ushort int uint float double 与具有位元长度的 int8 uint8 int16 uint16 int32 uint32 float32 float64 几种
除了顶点和多边形面两种基本元素外,PLY文件格式允许使用自定义的元素和元素属性,称为Other Element和Other Property。只要遵循文件格式中对元素及元素属性的格式定义,就能够被正常的解析,这也是PLY格式所具备的灵活性特色。
最后标头必须以此行结尾:
end_header
头部定义材料属性的部分:
element material 6
property ambient_red uint8
property ambient_green uint8
property ambient_blue uint8
property diffuse_red uint8
property diffuse_green uint8
property diffuse_blue uint8
property specular_red uint8
property specular_green uint8
property specular_blue uint8
property specular_power float32 { Phong 指数 }
这些行应该在头部顶点、面片和边的说明后直接出现。如果我们希望每个顶点有一个材质说明,我们可以将这行加在顶点属性末尾:
property material_index int32
下面这个例子是一个典型的ASCII格式的PLY文件,其所描述的是一个立方体。
ply format ascii 1.0 ...{ 文件类型:ascii或binary,版本号 } comment made by anonymous ... { 注释行 } comment this file is a cube ...{ 注释行 } element vertex 8 ...{ 定义“顶点”元素,其数量为8个 } property float32 x ...{ 顶点的x属性,数据类型为float32 } property float32 y ...{ 顶点的x属性,数据类型为float32 } property float32 z ...{ 顶点的x属性,数据类型为float32 } element face 6 ...{ 定义“面”元素,其数量为6个 } property list uint8 int32 vertex_index ...{ 面的顶点索引属性,类型为uint8的列表 } 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