现在的位置: 首页 > 综合 > 正文

PLY文件格式

2018年02月15日 ⁄ 综合 ⁄ 共 2741字 ⁄ 字号 评论关闭
原文地址:PLY文件格式作者:土人

本文转自
http://topic.csdn.net/u/20070602/13
/1e879838-9133-4d79-ad1f-b5f22c4e2758.html

 

OpenGL怎么载入Ply格式的3D模型?

1.找到PLY格式的定义
2.用C++的文件流读入并解析
3.用OPENGL将解析的顶点,纹理显示出来。

 

*.ply是Animator   Pro创建的一种图形文件格式,其中包含用来描述多边形的一系列点的信息

 

典型的   PLY   文件结构:

头部
顶点列表
面片列表
(其他元素列表)

头部是一系列以回车结尾的文本行,用来描述文件的剩余部分。头部包含一个对每个元素类型的描述,包括元素名(如“边”),这个元素在工程里有多少,以及一个与这个元素关联的不同属性的列表。头部还说明这个文件是二进制的或者是ASCII的。头部后面的是一个每个元素类型的元素列表,按照在头部中描述的顺序出现。

下面是一个立方体的完整ASCII描述。相同工程的二进制版本头部的唯一不同是用词“binary_little_endian”或者   “binary_big_endian”替换词“ascii”。大括号中的注释不是文件的一部分,它们是这个例子的注解。文件中的注释一般在   “comment”开始的关键词定义行里。

ply
format   ascii   1.0    ascii/二进制,格式版本数   }
comment   made   by   anonymous    注释关键词说明,像其他行一样   }
comment   this   file   is    cube
element   vertex     定义“vertex”(顶点)元素,在文件中有8个   }
property   float32     顶点包含浮点坐标“x”}
property   float32      坐标同样是一个顶点属性   }
property   float32      也是坐标   }
element   face     在文件里有6个“face”(面片)   }
property   list   uint8   int32   vertex_index    “vertex_indices”(顶点素引)是一列整数   }
end_header    划定头部结尾   }
     顶点列表的开始   }
   1
   1
   0
   0
   1
   1
   0
       面片列表开始   }
     4
     1
     2
     3
     0

这个例子说明头部的基本组成。头部的每个部分都是以一个关键词开头以回车结尾的ASCII串。即使是头部的开始和结尾(“ply”和 “end_header”)也是以这种形式。因为字符“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   <数值类型>   <数值类型>   <属性名>

这种格式的一类例子是上面的立方体文件中的:

property   list   uint8   int32   vertex_index

这表示属性“vertex_index”首先包含一个非负字符报苏在属性里包含多少索引,接下来是一个列表包含许多整数。在这个边长列表里的每个整数都是一个顶点的索引。

另外一个例子
------------

另外一个立方体定义:

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条边   }
property   int32   vertex1    边的第一个顶点的索引   }
property   int32   vertex2    第二个顶点的索引   }
property   uint8   red    边颜色开始   }
property   uint8   green
property   uint8   blue
end_header
    255      顶点列表开始   }
    255    0
    255    0
    255    0
      255
      255
      255
      255
      面片列表开始,从一个三角形开始   }
      另一个三角形   }
       现在是一些四边形   }
   

【上篇】
【下篇】

抱歉!评论已关闭.