• PLY格式介绍


    PLY是一种电脑档案格式,全名为多边形档案(Polygon File Format)或 斯坦福三角形档案(Stanford Triangle Format)。 
    史丹佛大学的 The Digital Michelangelo Project计划采用PLY格式储存极高分辨率之米开朗基罗的作品"大卫"雕塑。

    该格式主要用以储存立体扫描结果的三维数值,透过多边形片面的集合描述三维物体,与其他格式相较之下这是较为简单的方法。它可以储存的资讯包含颜色、透明度、表面法向量、材质座标与资料可信度,并能对多边形的正反两面设定不同的属性。

    在档案内容的储存上PLY有两种版本,分别是纯文字(ASCII)版本与二元码(binary)版本,其差异在储存时是否以ASCII编码表示元素资讯。

    档案格式

    (本文并未提供完整的格式描述,以下仅介绍PLY的基本概念与格式)

    每个PLY档都包含档头(header),用以设定网格模型的“元素”与“属性”,以及在档头下方接着一连串的元素“数值资料”。一般而言,网格模型的“元素”就是顶点(vertices)、面(faces),另外还可能包含有边(edges)、深度图样本(samples of range maps)与三角带(triangle strips)等元素。无论是纯文字与二元码的PLY档,档头资讯都是以ASCII编码编写,接续其后的数值资料才有编码之分。PLY档案以此行:

     ply
    

    开头作为PLY格式的识别。接着第二行是版本资讯,目前有三种写法:

     format ascii 1.0
     format binary_little_endian 1.0
     format binary_big_endian 1.0
    

    其中ascii, binary_little_endian, binary_big_endian是档案储存的编码方式,而1.0是遵循的标准版本(现阶段仅有PLY 1.0版)。在档头中可使用'comment'作为一行的开头以编写注解,例如:

     comment This is a comment!
    

    描述元素及属性,必须使用'element'及'property'的关键字,一般的格式为element下方接着属性列表,例如:

    element <element name> <number in file>
     property <data_type> <property name 1>
     property <data_type> <property name 2>
     property <data_type> <property name 3>
    

    'property'不仅定义了资料的型态,其出现顺序亦定义了资料的顺序。内定的资料形态有两种写法:一种是char uchar short ushort int uint float double,另外一种是具有位元长度的int8 uint8 int16 uint16 int32 uint32 float32 float64。 例如,描述一个包含12个顶点的物体,每个顶点使用3个单精度浮点数 (x,y,z)代表点的座标,使用3个unsigned char代表顶点颜色,颜色顺序为 (B, G, R),则档头的写法为:

     element vertex 12
     property float x
     property float y
     property float z
     property uchar blue
     property uchar green
     property uchar red
    

    其中vertex是内定的元素类型,接续的6行property描述构成vertex元素的数值字段顺序代表的意义,及其资料形态。

    另一个常使用的元素是。由于一个面是由3个以上的顶点所组成,因此使用一个“顶点列表”即可描述一个面, PLY格式使用一个特殊关键字'property list'定义之。 例如,一个具有10个面的物体,其PLY档头可能包含:

    element face 10
     property list uchar int vertex_indices
    

    'property list'表示该元素face的特性是由一行的顶点列表来描述。列表开头以uchar型态的数值表示列表的项目数,后面接着资料型态为int的顶点索引值(vertex_indices),顶点索引值从0开始。

    最后,标头必须以此行结尾:

     end_header
    

    档头后接着的是元素资料(端点座标、拓朴连结等)。在ASCII格式中各个端点与面的资讯都是以独立的一行描述,而二元编码格式则连续储存这些资料,加载时须以'element'定义的元素数目以及'property'中设定的资料形态计算各笔字段的长度。

    范例

    一个典型的PLY档案结构分成三部分:

    档头 (从ply开始到end_header)
    顶点元素列表
    面元素列表
    

    其中的顶点元素列表一般以x y z方式排列,形态如档头所定义;而面元素列表是以下列格式表示。

    <組成面的端點數N> <端點#1的索引> <端點#2的索引> ... <端點#N的索引>
    

    例如画出一个有4个顶点,4个面的四面体,档案内容为:

     ply
     format ascii 1.0
     comment這是一個正四面體
     element vertex 4
     property float x
     property float y
     property float z
     element face 4
     property list uchar int vertex_index
     end_header
     0 3 0
     2.449 -1.0 -1.414
     0 -1 2.828
     -2.449 -1.0 -1.414
     3 0 1 3
     3 0 2 1
     3 0 3 2
     3 1 2 3
    

    其中1~10行是档头, 11~14行是顶点元素列表, 15~18行则是面元素列表

    其中: 0 3 0是顶点

    历史

    PLY格式发展于90年代中期,在史丹佛大学图学实验室的Marc Levoy教授指导下,由Greg Turk及其他成员开发出来。PLY格式受Wavefront .obj格式的启发,但改进了Obj格式所缺少的对任意属性及群组的扩充性。因此PLY格式发明了"property"及"element"这两个关键词,来概括“顶点、面、相关资讯、群组”的概念。

    注意

    ply文件不支持中文格式的文件名字,所以在使用过程中避免使用中文来命名。

  • 相关阅读:
    在keil中使用svn源代码管理工具
    用VS2010写一个SL4的双工通讯的Demo
    Jenkins+Gitlab手动构建一个小项目
    快速建立ssh互信(一主两从)
    Ansible剧本(rsync+inotify+sersync)
    41设计模式学习资料
    Bad Request Invalid Hostname HTTP Error 400. The request hostname is invalid.
    cf交互题怎么写||算法学习方法论||codeforces700ABC总结 cf||引用大佬的博客||开篇
    codeforces699 div2 ABC | cf699 div2 abc | 贪心,贪心,还是贪心
    Pycharm破解
  • 原文地址:https://www.cnblogs.com/liangliangdetianxia/p/4000295.html
Copyright © 2020-2023  润新知