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 second 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 diffuse_red uchar               { diffuse color }

property diffuse_green uchar

property diffuse_blue uchar

property diffuse_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 }

这些线将在顶点、面和边的指定之后直接出现在标题中。如果我们想让每个顶点都有一个材质规格,我们可以在顶点属性的末尾添加这一行:

property material_index int

这个整数现在是文件中包含的材料列表的索引。对于新应用程序的作者来说,发明几个新元素存储在PLY文件中可能很诱人。这种做法应该保持在最低限度。更好的方法是尝试调整公共元素(顶点、面、边、材料)以适应新的用途,这样其他理解这些元素的程序在操作这些调整过的元素时可能会有用。例如,一个应用程序将分子描述为球体和圆柱体的集合。为包含分子的PLY文件定义球体和圆柱体元素是很有诱惑力的。然而,如果我们为此目的使用顶点和边元素(为每个元素添加半径属性),我们可以使用操作和显示顶点和边的程序。显然,我们不应该为三角形和四边形创建特殊的元素,而应该使用face元素。如果程序不知道面和顶点之间的邻接关系(所谓的非共享顶点),该怎么办?在这里,每个三角形(比如说)都是空间中三个位置的纯粹集合,不知道某些三角形是否有公共顶点。这是一种相当常见的情况。假设给定对象中有N个三角形,那么应该将3N个顶点写入文件,然后将N个面连接这些顶点。我们预期将编写一个实用程序来在非共享和共享顶点文件之间进行转换。

点云ply格式文件详解相关推荐

  1. XML格式文件详解及Java解析XML文件内容方法

    XML格式文件详解 1.概述 XML,即可扩展标记语言,XML是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者. ...

  2. Y4M(YUV4MPEG2) 格式文件详解

    Y4M 格式详解 · 扩展名: .y4m · 格式样例: http://samples.mplayerhq.hu/yuv4mpeg2/ YUV4MPEG2 是一种简单的文件格式,它被设计用来保存原始的 ...

  3. Sat格式文件详解翻译

    SAT Save File Format 7.0(Sat文件存储格式7.0) 译者:Mrzhu007 日期:2018年04月13日 博客地址:金色世界 ACIS can store modeling ...

  4. 【音频】Wav格式文件详解

    一,Windows支持两种RIFF(Resource Interchange File Format,"资源交互文件格式")格式的音频文件 MIDI的RMID文件和波形音频文件格式 ...

  5. 云服务器存储扩容详解

    云服务器存储扩容详解 2020-01-20阅读 6640 环境说明 Linux操作系统:CentOS Linux release 7.6.1810 (Core) 平台环境:腾讯云CVM,CBS 本教程 ...

  6. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  7. linux /proc目录文件详解

    Linux中/proc目录下文件详解(一) /proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用.可以使用的文件随系统配置的变化而变化.命令proc ...

  8. STM32(Cortex-M3)启动过程+IAR中xcl及icf文件详解

    一:STM32(Cortex-M3)启动过程(入口地址) ARM7和ARM9启动时从绝对地址0X00000000开始执行复位中断程序,即固定了复位后的起始地址,但中断向量表的位置是可变的. Corte ...

  9. /etc/passwd 文件详解

    /etc/passwd  文件详解 /etc/passwd  保存了系统中每一个用户的信息 /etc/passwd 中每个用户的信息占用了一行,也就是说这个文件有多少行,系统就有多少个用户. 要查看系 ...

最新文章

  1. js和java中URI的编码和解码
  2. react native 学习笔记
  3. 2017 Android 面试题 [ 基础与细节 ]
  4. ipsec在企业网中的应用(IKE野蛮模式)
  5. codevs 2924 数独挑战
  6. boost::log模块实现格式化程序流的测试程序
  7. Android钢琴滑动代码,android 钢琴界面实现
  8. k8s 分发证书文件 启动文件
  9. 设置DIV半透明CSS代码:
  10. LINQ聚合算法解释
  11. 使用GDAL对DEM渲染处理流程
  12. Vue/vant——未登陆时清空购物车以及拦截未登录的状态拒绝进入购物车页面
  13. CAJ转pdf在线网址
  14. ArcGIS三维分析之ArcGlobe简要说明
  15. 计算机系统的环境变量,电脑path环境变量不见了怎么恢复_教你恢复电脑path环境变量的方法...
  16. 如何治理谐波问题?——有源滤波器
  17. linux网桥的简单理解和配置
  18. CSS - Flexbox总结
  19. Unrecognized DataType
  20. tomcat跨域请求

热门文章

  1. 计算机中存储的数据类型
  2. 富豪刑警 富豪刑警修斯库界面效果实现
  3. jira 史诗 故事 任务_史诗般的数据提取任务
  4. 解决u盘图标显示异常
  5. 自定义控件详解(二):Path类 相关用法
  6. linux怎么设置wifi密码,技术|怎样在 Arch Linux 终端上更改 WiFi 密码
  7. 分享调试SI4432的一些小经验
  8. ug后处理如何加密_UG后处理修改方法
  9. 中国期货市场死亡警示录
  10. Docker 入坑指南