Opengl学习笔记:(一).Ply文件文件格式和文件读取

本文介绍了PLY文件格式,包括其作为多边形模型数据的用途、文件结构和元素描述。详细讲解了PLY文件的头部、顶点列表、面片列表以及其他元素列表,并提供了一个立方体的ASCII格式示例。最后,讨论了如何在OpenGL中读取并绘制PLY文件的内容,强调了不同文件中顶点属性的差异及其对绘制的影响。
摘要由CSDN通过智能技术生成

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

一、Ply简介

  • 这次实验老师要求用opengl读取.ply文件,个人理解,ply里面存储的是多边形模型的数据,包括一些点、面、材质、颜色等属性。

  • 比较严谨的解释:

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

二、Ply中的结构

1、PLY的文件结构:

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

2、 典型的PLY文件结构:

  • 1、 头部
  • 2、顶点列表
  • 3、面片列表
  • 4、 其他元素列表

3、简单举例

  • 1) 头部

    • a.头部是一系列以回车结尾的文本行,用来描述文件的剩余部分。
    • b. 头部包含一个对每个元素类型的描述,包括元素名(如“边”),元素的数量,以及一个与这个元素关联的不同属性的列表。
    • c.头部还说明这个文件是二进制的或者是ASCII的。
    • d.头部后面的是一个每个元素类型的元素列表,按照在头部中描述的顺序出现。
    • e.文件中的注释一般在 “comment”开始的关键词定义行里。
  • 2) 举例:下面是一个立方体的完整ASCII描述。大括号中的注释不是文件的一部分,它们是这个例子的注解。

    • a.头部的每个部分都是一个以关键词开头,以回车结尾的ASCII串。
    • b.”ply”是文件的头四个字符。
    • c.关键词“format”及其后面的是一个特定的ASCII或者二进制的格式,接下来是一个版本号。
    • d.end_header 头文件结束
    • f.再下面是多边形文件中每个元素的描述,在每个元素里还有多属性的说明。一般元素以下面的格式描述:
      element <元素名> <在文件中的个数>
      property <数据类型> <属性名-1>
      property <数据类型> <属性名-2>
      property <数据类型> <属性名-3>
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 
  • 3) 其他说明
    • 属性罗列在“element”(元素)行后面定义,既包含属性的数据类型,也包含属性在每个元素中出现的次序。一个属性可以有三种数据类型:标量,字符串和列表。属性可能具有的标量数据类型列表如下。
    • 这些字节计数很重要,而且在实现过程中不能修改以使这些文件可移植。
    • 使用列表数据类型的属性定义有一种特殊的格式:property list <数值类型> <数值类型> <属性名> ,这种格式,一个非负字符表示在属性里包含多少索引,接下来是一个列表包含许多整数。在这个边长列表里的每个整数都是一个顶点的索引。
          名称      类型           字节数 
         ------------------------------- 
         int8        字符          1 
         uint8      非负字符        1 
         int16      短整型          2 
         uint16    
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值