您的位置:首页 > 其它

PLY格式文件具体解释

2016-03-01 12:11 218 查看
链接:http://blog.csdn.net/szchtx/article/details/7587999
http://cdu.net.cn/3D/2014-04-23/705.html
一、PLY简单介绍

PLY文件格式是Stanford大学开发的一套三维mesh模型数据格式,图形学领域内非常多著名的模型数据,比方Stanford的三维扫描数据库(当中包含非常多文章中会见到的Happy Buddha, Dragon, Bunny兔子),Geogia Tech的大型几何模型库。北卡(UNC)的电厂模型等,最初的模型都是基于这个格式的。

PLY多边形文件格式的开发目标是建立一套针对多边形模型的,结构简单可是可以满足大多数图形应用须要的模型格式,并且它同意以ASCII码格式或二进制形式存储文件。PLY的开发人员希望。这样一套既简单又灵活的文件格式,可以帮助开发人员避免反复开发文件格式的问题。然而因为各种各样的原因,在工业领域内,新的文件格式仍然在不断的出现,可是在图形学的研究领域中,PLY还是种经常使用且关键的文件格式。

PLY作为一种多边形模型数据格式,不同于三维引擎中经常使用的场景图文件格式和脚本文件。每一个PLY文件仅仅用于描写叙述一个多边形模型对象(Object),该模型对象能够通过诸如顶点、面等数据进行描写叙述,每一类这种数据被称作一种元素(Element)。相比于现代的三维引擎中所用到的各种复杂格式。PLY实在是种简单的不能再简单的文件格式,可是假设细致研究就会发现,就像设计者所说的,这对于绝大多数的图形应用来说已经是足够用了。

二、PLY结构

PLY的文件结构简单:文件头加上元素数据列表。当中文件头中以行为单位描写叙述文件类型、格式与版本号、元素类型、元素的属性等,然后就依据在文件头中所列出元素类型的顺序及其属性,依次记录各个元素的属性数据。

典型的PLY文件结构:

头部

顶点列表

面片列表

(其它元素列表)

头部是一系列以回车结尾的文本行。用来描写叙述文件的剩余部分。

头部包括一个对每一个元素类型的描写叙述,包括元素名(如“边”)。这个元素在project里有多少,以及一个与这个元素关联的不同属性的列表。头部还说明这个文件是二进制的或者是ASCII的。头部后面的是一个每一个元素类型的元素列表,依照在头部中描写叙述的顺序出现。

以下是一个立方体的完整ASCII描写叙述。大括号里的凝视不是文件的一部分,它们是这个样例的注解。文件里的凝视一般在 “comment”開始的关键词定义行里。

[plain] view
plaincopyprint?

<span style="font-size:16px;">ply

format ascii 1.0 { ascii/二进制。格式版本号数 }

comment made by anonymous { 凝视关键词说明,像其它行一样 }

comment this file is a cube

element vertex 8 { 定义“vertex”(顶点)元素,在文件里有8个 }

property float32 x { 顶点包括浮点坐标“x”}

property float32 y { y 坐标相同是一个顶点属性 }

property float32 z { z 也是坐标 }

element face 6 { 在文件中有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 </span>

这个样例说明头部的基本组成。头部的每一个部分都是一个以关键词开头。以回车结尾的ASCII串。"ply"是文件的头四个字符。

跟在文件头部开头之后的,是关键词“format”和一个特定的ASCII或者二进制的格式,接下来是一个版本。

再以下是多边形文件里每一个元素的描写叙述。在每一个元素里还有多属性的说明。

一般元素以以下的格式描写叙述:

element <元素名> <在文件里的个数>

property <数据类型> <属性名-1>

property <数据类型> <属性名-2>

property <数据类型> <属性名-3>

属性罗列在“element”(元素)行后面定义,既包括属性的数据类型,也包括属性在每一个元素中出现的次序。一个属性能够有三种数据类型:标量,字符串和列表。

属性可能具有的标量数据类型列表例如以下:

名称 类型 字节数

-------------------------------

int8 字符 1

uint8 非负字符 1

int16 短整型 2

uint16 非负短整型 2

int32 整型 4

uint32 非负整型 4

float32 单精度浮点数 4

float64 双精度浮点数 8

这些字节计数非常重要,并且在实现过程中不能改动以使这些文件可移植。

使用列表数据类型的属性定义有一种特殊的格式:property list <数值类型> <数值类型> <属性名> ,这样的格式,一个非负字符表示在属性里包括多少索引,接下来是一个列表包括很多整数。在这个边长列表里的每一个整数都是一个顶点的索引。

另外一个立方体定义:

[plain] view
plaincopyprint?

ply

format ascii 1.0

comment author: anonymous

comment object: another cube

element vertex 8

property float32 x

property float32 y

property float32 z

property red uint8 { 顶点颜色開始 }

property green uint8

property blue uint8

element face 7

property list uint8 int32 vertex_index { 每一个面片的顶点个数 }

element edge 5 { 物体里有5条边 }

property int32 vertex1 { 边的第一个顶点的索引 }

property int32 vertex2 { 第二个顶点的索引 }

property uint8 red { 边颜色開始 }

property uint8 green

property uint8 blue

end_header

0 0 0 255 0 0 { 顶点列表開始 }

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 { 面片列表開始,从一个三角形開始 }

3 0 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

0 1 255 255 255 { 边列表開始,从白边開始 }

1 2 255 255 255

2 3 255 255 255

3 0 255 255 255

2 0 0 0 0 { 以一个黑线结束 }

这个文件为每一个顶点指定一个红、绿、蓝值。

为了说明变长vertex_index(顶点索引)的能力,物体的头两个面片是两个三角形而不是一个四边形。

这意味着物体的面片数是7。

这个物体还包含一个边列表。

每条边包含两个指向说明边的顶点的指针。每条边也有一种颜色。上面定义的五条边指定了颜色,使文件中的两个三角形高亮。

前四条边白色。它们包围两个三角形。最后一条边是黑的,他是切割三角形的边。

三、用户定义元素

上面的样例显示了顶点、面片和边三种元素的使用方法。PLY 格式相同同意用户定义它们自己的元素。定义新元素的格式于顶点、面片和边相同。这是头部定义材料属性的部分:

[plain] view
plaincopyprint" style="color:rgb(160,160,160); text-decoration:none; background-color:inherit; border:none; padding:0px; margin:0px 10px 0px 0px; font-size:9px">?

element material 6

property ambient_red uint8 { 围绕颜色 }

property ambient_green uint8

property ambient_blue uint8

property ambient_coeff float32

property diffuse_red uint8 { 扩散(diffuse)颜色 }

property diffuse_green uint8

property diffuse_blue uint8

property diffuse_coeff float32

property specular_red uint8 { 镜面(specular)颜色 }

property specular_green uint8

property specular_blue uint8

property specular_coeff float32

property specular_power float32 { Phong 指数 }

这些行应该在头部顶点、面片和边的说明后直接出现。假设我们希望每一个顶点有一个材质说明,我们能够将这行加在顶点属性末尾:property material_index int32

这个整数如今是一个到文件内包括的材质列表的索引。这可能诱使一个新应用的作者编制一些信的元素保存在PLY文件里。

转载自:http://blog.csdn.net/lxfyzx/article/details/4997627

http://blog.csdn.net/lxfyzx/article/details/4997780
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: