51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

查看: 286|回复: 0
收起左侧

[资料] PLY文件格式及其解析

[复制链接]
  • TA的每日心情
    开心
    2019-10-30 10:30
  • 签到天数: 60 天

    连续签到: 3 天

    [LV.6]常住居民II

    20

    主题

    87

    帖子

    2654

    积分

    Rank: 5Rank: 5Rank: 5

    积分
    2654
    发表于 2019-6-13 11:44:09 | 显示全部楼层 |阅读模式

    部门总监 |主题 20|帖子 87|积分 2654

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    Ply文件格式是Stanford大学开发的一套三维mesh模型数据格式,图形学领域内很多著名的模型数据,比如Stanford的三维扫描数据库[1](其中包括很多文章中会见到的Happy Buddha、Dragon、Bunny兔子),Geogia Tech的大型几何模型库[3],北卡(UNC)的电厂模型[4]等,最初的模型都是基于这个格式的。

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

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

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

    下面这个例子是一个典型的ASCII格式的PLY文件,其所描述的是一个立方体。
    1. pl
    2. format ascii 1.0             { 文件类型:ascii或binary,版本号 }
    3. comment made by anonymous    { 注释行 }
    4. comment this file is a cube  { 注释行 }
    5. element vertex 8             { 定义“顶点”元素,其数量为8个 }
    6. property float32 x           { 顶点的x属性,数据类型为float32 }
    7. property float32 y           { 顶点的x属性,数据类型为float32 }
    8. property float32 z           { 顶点的x属性,数据类型为float32 }
    9. element face 6               { 定义“面”元素,其数量为6个 }
    10. property list uint8 int32 vertex_index { 面的顶点索引属性,类型为uint8的列表 }
    11. end_header                   { 文件头结束标志 }
    12. 0 0 0                        { 顶点元素列表 }
    13. 0 0 1
    14. 0 1 1
    15. 0 1 0
    16. 1 0 0
    17. 1 0 1
    18. 1 1 1
    19. 1 1 0
    20. 4 0 1 2 3                    { 面元素列表 }
    21. 4 7 6 5 4
    22. 4 0 4 5 1
    23. 4 1 5 6 2
    24. 4 2 6 7 3
    25. 4 3 7 4 0
    复制代码

    从这个文件的文件头可以看到,文件定义的对象由8个顶点元素和6个多边形面元素组成,其中顶点元素包括x、y、z三个属性,其在文件中均为32位浮点类型,而多边形面元素则只包括一个顶点索引列表的属性,作为一个列表属性,它包括两部分,即列表元素的数量(uint8类型)及各个列表元素(int32类型),其中每个列表属性的数据包括4个列表元素,分别表示每个多边形面的4个顶点的索引。

    PLY格式支持如下的数据类型。

    name        type        number of bytes

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

    int8       character                       1

    uint8      unsigned character        1

    int16      short integer                 2

    uint16     unsigned short integer  2

    int32      integer                          4

    uint32     unsigned integer           4

    float32    single-precision float    4

    float64    double-precision float  8

    但是需要注意,由于PLY格式的开放性,有些PLY文件的解析程序不支持全部的数据类型,也有的PLY文件采用自定义的数据类型,这些都有可能导致文件解析过程的失败。(我在一次将PLY文件加载到Ogre应用的时候,出于测试的目的手动写了一个PLY文件,加载总是失败,反复查找才发现原来是文件中写的顶点格式为uint32,加载程序根本不支持。)

    对于元素的属性定义方式,PLY允许单一属性定义:

    property <data-type> <property-name-1>

    以及列表属性方式:

    property list <numerical-type> <numerical-type> <property-name>

    其中第一个数据类型描述列表元素数量,第二个数据类型描述每个列表元素。

    除了顶点和多边形面两种基本元素外,PLY文件格式允许使用自定义的元素和元素属性,称为Other Element和Other Property。只要遵循文件格式中对元素及元素属性的格式定义,就能够被正常的解析,这也是PLY格式所具备的灵活性特色。


    PLY文件格式的规范及其解析的源代码都是开放的,可以从参考文献中找到相关的下载。最著名的就是Greg Turk在1994年发布的解析代码,Turk似乎也是PLY格式的开发者之一,因为我参考的“The PLY Polygon File Format”就是他写的。我现在用的就是Turk的代码,很方便也挺稳定的,有机会会把结构分析一下。

    原文:https://blog.csdn.net/rickArkin/article/details/1845870

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用反馈 | 51Halcon论坛管理团队论坛管理团队

    申请友链| 小黑屋| 手机版| Archiver|  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    Powered by 51Halcon机器视觉 X3.4 Licensed© 2015-2019 Comsenz Inc.

    快速回复 返回顶部 返回列表