点云ply格式⽂件详解
PLy多边形⽂件格式,⼜被称作斯坦福三⾓形格式,它是⼀种为了储存计算机多边形图形集对象的格式。它即简单执⾏⼜是⼀个通⽤程度较⾼的格式。Ply⽂件有两种⼦格式ASCII和⼆进制形式,ASCII具有简单易操作的特点,⼆进制拥有读写紧凑的特点。
概要:典型的PLY格式只有xyz的三元列表和⼀个顶点列表中的索引所描述的⾯列表,多数PLY⽂件都包含这两种核信息。顶点和⾯是元素的两个⽰例,PLY⽂件的主体是它的元素列表。在所给的⽂件中每⼀元素都有固定的数值的属性,这些属性是为每个元素指定的。PlY种典型信息仅包含两种元素,顶点的xyz和每个⾯的顶点索引。应⽤可以新建附加属性在对象的元素上。例如,红绿蓝属性常常可以附加在顶点元素上。新的属性和旧的程序遭遇时上不会中断则新的属性可以被添加。不被程序所理解的属性也可以携带或者丢弃。此外,可以创建新的元素类型并且定义与该元素关联的属性。可以创建新的边界,材质和细胞元素。同样,新的元素在不被程序理解的情况下,也可以选择性的携带或者丢弃。
⽂件结构:
典型的PLY⽂件结构如下:
薛仁贵老婆
Header
Vertex List
Face List
(lists of other elements)
Header 是⼀系列以回车结尾的⽂本⾏,描述⽂件的剩余部分。Header包含对每⼀个元素类型的描述、包含元素的名称、在对象中素的数量和与元素相关联的各种属性的列表。Header也告诉了⽂件属于ASCII编码还是⼆进制编码。Header下⾯是每个元素类型的元素列表,按照header中的顺序显⽰。
下⾯是对⼀个⽴⽅体的完整ASCII描述。⼆进制header版本对同⼀对象的描述只有⼀处不同,就是将“binary_little_endian”或
者“binary_big_endian”替换成“ascii”。括号中的评论不是⽂件的⼀部分,它是本⽰例的注释。⽂件中的注释是普通的关键字识别⾏,以单词“comment”开始。养巴哥最大的忌讳
ply
format ascii 1.0 { ascii/binary, format version number }
comment made by Greg Turk { comments keyword specified, like all lines }
comment this file is a cube
element vertex 8 { define "vertex" element, 8 of them in file }
property float x { vertex contains float "x" coordinate }
property float y { y coordinate is also a vertex property }
property float z { z coordinate, too }
element face 6 { there are 6 "face" elements in the file }
property list uchar int vertex_index { "vertex_indices" is a list of ints }
end_header { delimits the end of the header }
0 0 0 { start of vertex list }
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 { start of face list }
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
这个⽰例演⽰了header的基础构成。Header中每⼀⾏都是以关键字开头回车键结尾的ASCII字符串,甚⾄开头的ply和结尾的end_header 也是这⼀格式。字符ply
必须是⽂件的开头四个字符,他们是⽂件的“魔法数字”
Header⽂件的开头后⾯是关键字“formate”和ASCII或者⼆进制的规范,后⾯是版本号。接着是多边形⽂件中每⼀个元素的描述,在每个元素描述中是属性的规范。通常元素描述的形式是:
element
游戏赚property苦瓜祛痘
七年级下册文言文property
property
在“element”⾏之后列出的属性定义了属性的数据类型,以及每个元素的属性出现的顺序。属性可以具有两种数据类型:标量和列表。下⾯是⼀个属性可能具有的标量数据类型列表: name type number of bytes
---------------------------------------
char character 1
uchar unsigned character 1
日期英语表达方式short short integer 2
ushort unsigned short integer 2
int integer 4
uint unsigned integer 4
float single-precision float 4
double double-precision float 8
这些字节计数很重要,为了使这些⽂件具有可移植性,必须在不同的实现中保持⼀致。有⼀种特殊形式的属性定义使⽤列表数据类型: property list
上⾯的多维数据集⽂件就是⼀个例⼦:
property list uchar int vertex_index
这意味着属性"vertex_index"⾸先包含⼀个⽆符号字符,说明该属性包含多少索引,然后是⼀个包含多少整数的列表。这个变长列表中的每个整数都是顶点的索引。
注意,⾯列表⽣成三⾓形的顺序是TRIANGLE FAN,⽽不是TRIANGLE STRIP。在上⾯的例⼦中,第⼀个⾯
4 0 1 2 3
由三⾓形0 1 2和0 2 3组成⽽不是0 1 2和1 2 3。
另⼀个例⼦:
下⾯是另⼀个⽴⽅体定义:
ply
format ascii 1.0
comment author: Greg Turk
comment object: another cube
演讲比赛通知
element vertex 8
property float x
property float y
property float z
property uchar red { start of vertex color }
property uchar green
property uchar blue
element face 7
property list uchar int vertex_index { number of vertices for each face } element edge 5 { five edges in object }
property int vertex1 { index to first vertex of edge } property int vertex2 { index to cond vertex }
property uchar red { start of edge color }
property uchar green
property uchar blue
end_header
0 0 0 255 0 0 { start of vertex list }
0 0 1 255 0 0
0 1 1 255 0 0
0 1 0 255 0 0
1 0 0 0 0 255
1 0 1 0 0 255
1 1 1 0 0 255
1 1 0 0 0 255
3 0 1 2 { start of face list, begin with a triangle }
3 0 2 3 { another triangle }
4 7 6
5 4 { now some quadrilaterals }
4 0 4
5 1
4 1
5
6 2
4 2 6 7 3
4 3 7 4 0
0 1 255 255 255 { start of edge list, begin with white edge }
1 2 255 255 255
2 3 255 255 255
3 0 255 255 255
2 0 0 0 0 { end with a single black line }
这个⽂件为每个顶点指定⼀个红、绿、蓝值。为了说明vertex_index的变长特性,对象的前两个⾯是三⾓形⽽不是单⼀的正⽅形。这意味着这个物体的⾯数是7。这个对象还包含⼀个边的列表。每条边都包含两个指针,指向描绘这条边的顶点每条边也有⼀种颜⾊。上⾯定义的五条边是指定的,以便突出显⽰⽂件中的两个三⾓形。前四条边是⽩⾊的,它们围绕着两个三⾓形。最后⼀条边是⿊⾊的,它是分开三⾓形的边。
⽤户⾃定义单元:
上⾯的例⼦展⽰了三种元素的使⽤:顶点、⾯和边。PLY格式还允许⽤户定义⾃⼰的元素。定义新元素的格式与定义顶点、⾯和边的格式完全相同。下⾯是头⽂件中定义material属性的部分:
element material 6
property ambient_red uchar { ambient color }
property ambient_green uchar
property ambient_blue uchar
property ambient_coeff float
property diffu_red uchar { diffu color }
property diffu_green uchar
property diffu_blue uchar
property diffu_coeff float
property specular_red uchar { specular color }
property specular_green uchar
property specular_blue uchar
property specular_coeff float
property specular_power float { Phong power }
给小朋友的新年祝福语