PLy多边形文件格式,又被称作斯坦福三角形格式,它是一种为了储存计算机多边形图形集对象的格式。它即简单执行又是一个通用程度较高的格式。Ply文件有两种子格式ASCII和二进制形式,ASCII具有简单易SEO靠我操作的特点,二进制拥有读写紧凑的特点。
概要:典型的PLY格式只有xyz的三元列表和一个顶点列表中的索引所描述的面列表,多数PLY文件都包含这两种核信息。顶点和面是元素的两个示例,PLY文件的主体是它的SEO靠我元素列表。在所给的文件中每一元素都有固定的数值的属性,这些属性是为每个元素指定的。PlY种典型信息仅包含两种元素,顶点的xyz和每个面的顶点索引。应用可以新建附加属性在对象的元素上。例如,红绿蓝属性常SEO靠我常可以附加在顶点元素上。新的属性和旧的程序遭遇时上不会中断则新的属性可以被添加。不被程序所理解的属性也可以携带或者丢弃。此外,可以创建新的元素类型并且定义与该元素关联的属性。可以创建新的边界,材质和细SEO靠我胞元素。同样,新的元素在不被程序理解的情况下,也可以选择性的携带或者丢弃。
文件结构:
典型的PLY文件结构如下:
Header
Vertex List
Face List
(lists of other eleSEO靠我ments)
Header 是一系列以回车结尾的文本行,描述文件的剩余部分。Header包含对每一个元素类型的描述、包含元素的名称、在对象中素的数量和与元素相关联的各种属性的列表。Header也告诉了文SEO靠我件属于ASCII编码还是二进制编码。Header下面是每个元素类型的元素列表,按照header中的顺序显示。
下面是对一个立方体的完整ASCII描述。二进制header版本对同一对象的描述只有一处不同,SEO靠我就是将“binary_little_endian”或者“binary_big_endian”替换成“ascii”。括号中的评论不是文件的一部分,它是本示例的注释。文件中的注释是普通的关键字识别行,以单SEO靠我词“comment”开始。
ply format ascii 1.0 { ascii/binary, format version number } SEO靠我 comment made by Greg Turk { comments keyword specified, like all lines } comment this filSEO靠我e is a cube element vertex 8 { define "vertex" element, 8 of them in file } SEO靠我 property float x { vertex contains float "x" coordinate } property float y SEO靠我 { y coordinate is also a vertex property } property float z { z coordSEO靠我inate, too } element face 6 { there are 6 "face" elements in the file } SEO靠我 property list uchar int vertex_index { "vertex_indices" is a list of ints } end_header SEO靠我 { delimits the end of the header } 0 0 0 { start SEO靠我of vertex list } 0 0 1 0 1 1 0 1 0 1 0 0 1 0 1 1 1 1SEO靠我 1 1 0 4 0 1 2 3 { start of face list } 4 7 6 5 4 SEO靠我 4 0 4 5 1 4 1 5 6 2 4 2 6 7 3 4 3 7 4 0这个示例演示了header的基础构成。Header中每一行都是以关键字SEO靠我开头回车键结尾的ASCII字符串,甚至开头的ply和结尾的end_header也是这一格式。字符ply
必须是文件的开头四个字符,他们是文件的“魔法数字”
Header文件的开头后面是关键字“formatSEO靠我e”和ASCII或者二进制的规范,后面是版本号。接着是多边形文件中每一个元素的描述,在每个元素描述中是属性的规范。通常元素描述的形式是:
element property SEO靠我 property property 在“element”行之后列出的属性定义了属性的数据类型,以及每个元素的属性出现的顺序。属性可以具有两种数据类型:标量和列表SEO靠我。下面是一个属性可能具有的标量数据类型列表: name type number of bytes ---------------------------SEO靠我------------ char character 1 uchar unsigned character SEO靠我 1 short short integer 2 ushort unsigned short integer SEO靠我 2 int integer 4 uint unsigned integer SEO靠我 4 float single-precision float 4 double double-precision float 8这些字节SEO靠我计数很重要,为了使这些文件具有可移植性,必须在不同的实现中保持一致。有一种特殊形式的属性定义使用列表数据类型:
property list上面的多维数据集文件就是一个例子:
property list uSEO靠我char int vertex_index这意味着属性"vertex_index"首先包含一个无符号字符,说明该属性包含多少索引,然后是一个包含多少整数的列表。这个变长列表中的每个整数都是顶点的索引。SEO靠我
注意,面列表生成三角形的顺序是TRIANGLE FAN,而不是TRIANGLE STRIP。在上面的例子中,第一个面
4 0 1 2 3
由三角形0 1 2和0 2 3组成而不是0 1 2和1 2 3。
另SEO靠我一个例子:
下面是另一个立方体定义:
ply format ascii 1.0 comment author: Greg Turk comment objeSEO靠我ct: another cube element vertex 8 property float x property float y SEO靠我property float z property uchar red { start of vertex color } propSEO靠我erty uchar green property uchar blue element face 7 property list uchar int SEO靠我vertex_index { number of vertices for each face } element edge 5 { fSEO靠我ive edges in object } property int vertex1 { index to first vertex of edge SEO靠我} property int vertex2 { index to second vertex } property uchar reSEO靠我d { start of edge color } property uchar green property uchar bluSEO靠我e end_header 0 0 0 255 0 0 { start of vertex list } SEO靠我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 25SEO靠我5 1 1 1 0 0 255 1 1 0 0 0 255 3 0 1 2 { start of fSEO靠我ace list, begin with a triangle } 3 0 2 3 { another triangle } SEO靠我 4 7 6 5 4 { now some quadrilaterals } 4 0 4 5 1 4 1 5 6SEO靠我 2 4 2 6 7 3 4 3 7 4 0 0 1 255 255 255 { start of edge lisSEO靠我t, begin with white edge } 1 2 255 255 255 2 3 255 255 255 3 0 255 255 255 SEO靠我 2 0 0 0 0 { end with a single black line }这个文件为每个顶点指定一个红、绿、蓝值。为了说明verSEO靠我tex_index的变长特性,对象的前两个面是三角形而不是单一的正方形。这意味着这个物体的面数是7。这个对象还包含一个边的列表。每条边都包含两个指针,指向描绘这条边的顶点每条边也有一种颜色。上面定义的SEO靠我五条边是指定的,以便突出显示文件中的两个三角形。前四条边是白色的,它们围绕着两个三角形。最后一条边是黑色的,它是分开三角形的边。
用户自定义单元:
上面的例子展示了三种元素的使用:顶点、面和边。PLY格式SEO靠我还允许用户定义自己的元素。定义新元素的格式与定义顶点、面和边的格式完全相同。下面是头文件中定义material属性的部分:
element material 6
property ambient_red SEO靠我uchar { ambient color }
property ambient_green uchar
property ambient_blue uchar
propertySEO靠我 ambient_coeff float
property diffuse_red uchar { diffuse color }
property diffuse_greenSEO靠我 uchar
property diffuse_blue uchar
property diffuse_coeff float
property specular_red uchar SEO靠我 { specular color }
property specular_green uchar
property specular_blue uchar
property specular_coeffSEO靠我 float
property specular_power float { Phong power }
这些线将在顶点、面和边的指定之后直接出现在标题中。如果我们想让每个顶点都有一SEO靠我个材质规格,我们可以在顶点属性的末尾添加这一行:
property material_index int
这个整数现在是文件中包含的材料列表的索引。对于新应用程序的作者来说,发明几个新元素存储在PLY文件SEO靠我中可能很诱人。这种做法应该保持在最低限度。更好的方法是尝试调整公共元素(顶点、面、边、材料)以适应新的用途,这样其他理解这些元素的程序在操作这些调整过的元素时可能会有用。例如,一个应用程序将分子描述为SEO靠我球体和圆柱体的集合。为包含分子的PLY文件定义球体和圆柱体元素是很有诱惑力的。然而,如果我们为此目的使用顶点和边元素(为每个元素添加半径属性),我们可以使用操作和显示顶点和边的程序。显然,我们不应该为SEO靠我三角形和四边形创建特殊的元素,而应该使用face元素。如果程序不知道面和顶点之间的邻接关系(所谓的非共享顶点),该怎么办?在这里,每个三角形(比如说)都是空间中三个位置的纯粹集合,不知道某些三角形是否SEO靠我有公共顶点。这是一种相当常见的情况。假设给定对象中有N个三角形,那么应该将3N个顶点写入文件,然后将N个面连接这些顶点。我们预期将编写一个实用程序来在非共享和共享顶点文件之间进行转换。
网站备案号:浙ICP备17034767号-2