PLY格式文件具体解释
鏈接:http://blog.csdn.net/szchtx/article/details/7587999
http://cdu.net.cn/3D/2014-04-23/705.html
一、PLY簡單介紹
PLY文件格式是Stanford大學開發的一套三維mesh模型數據格式,圖形學領域內非常多著名的模型數據,比方Stanford的三維掃描數據庫(當中包含非常多文章中會見到的HappyBuddha, Dragon, Bunny兔子),Geogia Tech的大型幾何模型庫。北卡(UNC)的電廠模型等,最初的模型都是基于這個格式的。
PLY多邊形文件格式的開發目標是建立一套針對多邊形模型的,結構簡單可是可以滿足大多數圖形應用須要的模型格式,并且它同意以ASCII碼格式或二進制形式存儲文件。PLY的開發人員希望。這樣一套既簡單又靈活的文件格式,可以幫助開發人員避免反復開發文件格式的問題。然而因為各種各樣的原因,在工業領域內,新的文件格式仍然在不斷的出現,可是在圖形學的研究領域中,PLY還是種經常使用且關鍵的文件格式。
PLY作為一種多邊形模型數據格式,不同于三維引擎中經常使用的場景圖文件格式和腳本文件。每一個PLY文件僅僅用于描寫敘述一個多邊形模型對象(Object),該模型對象能夠通過諸如頂點、面等數據進行描寫敘述,每一類這種數據被稱作一種元素(Element)。相比于現代的三維引擎中所用到的各種復雜格式。PLY實在是種簡單的不能再簡單的文件格式,可是假設細致研究就會發現,就像設計者所說的,這對于絕大多數的圖形應用來說已經是足夠用了。
二、PLY結構
PLY的文件結構簡單:文件頭加上元素數據列表。當中文件頭中以行為單位描寫敘述文件類型、格式與版本號、元素類型、元素的屬性等,然后就依據在文件頭中所列出元素類型的順序及其屬性,依次記錄各個元素的屬性數據。
典型的PLY文件結構:
頭部
頂點列表
面片列表
(其它元素列表)
頭部是一系列以回車結尾的文本行。用來描寫敘述文件的剩余部分。
頭部包括一個對每一個元素類型的描寫敘述,包括元素名(如“邊”)。這個元素在project里有多少,以及一個與這個元素關聯的不同屬性的列表。頭部還說明這個文件是二進制的或者是ASCII的。頭部后面的是一個每一個元素類型的元素列表,依照在頭部中描寫敘述的順序出現。
以下是一個立方體的完整ASCII描寫敘述。大括號里的凝視不是文件的一部分,它們是這個樣例的注解。文件里的凝視一般在 “comment”開始的關鍵詞定義行里。
[plain]view
plaincopyprint?
<spanstyle="font-size:16px;">ply
formatascii1.0{ascii/二進制。格式版本號數}
commentmadebyanonymous{凝視關鍵詞說明,像其它行一樣}
commentthisfileisacube
elementvertex8{定義“vertex”(頂點)元素,在文件里有8個}
propertyfloat32x{頂點包括浮點坐標“x”}
propertyfloat32y{y坐標相同是一個頂點屬性}
propertyfloat32z{z也是坐標}
elementface6{在文件中有6個“face”(面片)}
propertylistuint8int32vertex_index{“vertex_indices”(頂點素引)是一列整數}
end_header{劃定頭部結尾}
000{頂點列表的開始}
001
011
010
100
101
111
110
40123{面片列表開始}
47654
40451
41562
42673
43740</span>
這個樣例說明頭部的基本組成。頭部的每一個部分都是一個以關鍵詞開頭。以回車結尾的ASCII串。"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 <數值類型> <數值類型> <屬性名> ,這樣的格式,一個非負字符表示在屬性里包括多少索引,接下來是一個列表包括很多整數。在這個邊長列表里的每一個整數都是一個頂點的索引。
另外一個立方體定義:
[plain]view
plaincopyprint?
ply
formatascii1.0
commentauthor:anonymous
commentobject:anothercube
elementvertex8
propertyfloat32x
propertyfloat32y
propertyfloat32z
propertyreduint8{頂點顏色開始}
propertygreenuint8
propertyblueuint8
elementface7
propertylistuint8int32vertex_index{每一個面片的頂點個數}
elementedge5{物體里有5條邊}
propertyint32vertex1{邊的第一個頂點的索引}
propertyint32vertex2{第二個頂點的索引}
propertyuint8red{邊顏色開始}
propertyuint8green
propertyuint8blue
end_header
00025500{頂點列表開始}
00125500
01125500
01025500
10000255
10100255
11100255
11000255
3012{面片列表開始,從一個三角形開始}
3023{還有一個三角形}
47654{如今是一些四邊形}
40451
41562
42673
43740
01255255255{邊列表開始,從白邊開始}
12255255255
23255255255
30255255255
20000{以一個黑線結束}
這個文件為每一個頂點指定一個紅、綠、藍值。
為了說明變長vertex_index(頂點索引)的能力,物體的頭兩個面片是兩個三角形而不是一個四邊形。
這意味著物體的面片數是7。
這個物體還包含一個邊列表。
每條邊包含兩個指向說明邊的頂點的指針。每條邊也有一種顏色。上面定義的五條邊指定了顏色,使文件中的兩個三角形高亮。
前四條邊白色。它們包圍兩個三角形。最后一條邊是黑的,他是切割三角形的邊。
三、用戶定義元素
上面的樣例顯示了頂點、面片和邊三種元素的使用方法。PLY 格式相同同意用戶定義它們自己的元素。定義新元素的格式于頂點、面片和邊相同。這是頭部定義材料屬性的部分:
[plain]view
plaincopyprint
">?
elementmaterial6
propertyambient_reduint8{圍繞顏色}
propertyambient_greenuint8
propertyambient_blueuint8
propertyambient_coefffloat32
propertydiffuse_reduint8{擴散(diffuse)顏色}
propertydiffuse_greenuint8
propertydiffuse_blueuint8
propertydiffuse_coefffloat32
propertyspecular_reduint8{鏡面(specular)顏色}
propertyspecular_greenuint8
propertyspecular_blueuint8
propertyspecular_coefffloat32
propertyspecular_powerfloat32{Phong指數}
這些行應該在頭部頂點、面片和邊的說明后直接出現。假設我們希望每一個頂點有一個材質說明,我們能夠將這行加在頂點屬性末尾:property material_index int32
這個整數如今是一個到文件內包括的材質列表的索引。這可能誘使一個新應用的作者編制一些信的元素保存在PLY文件里。
轉載自:http://blog.csdn.net/lxfyzx/article/details/4997627
http://blog.csdn.net/lxfyzx/article/details/4997780
總結
以上是生活随笔為你收集整理的PLY格式文件具体解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xamarin真的是一个鸡肋吗?
- 下一篇: IP首部中的服务类型(TOS)