ply补全为立方体_PLY文件格式
一、PLY簡(jiǎn)介
PLY文件格式是Stanford大學(xué)開發(fā)的一套三維mesh模型數(shù)據(jù)格式,圖形學(xué)領(lǐng)域內(nèi)很多著名的模型數(shù)據(jù),比如Stanford的三維掃描數(shù)據(jù)庫(其中包括很多文章中會(huì)見到的Happy?Buddha, Dragon, Bunny兔子),Geogia Tech的大型幾何模型庫,北卡(UNC)的電廠模型等,最初的模型都是基于這個(gè)格式的。
PLY多邊形文件格式的開發(fā)目標(biāo)是建立一套針對(duì)多邊形模型的,結(jié)構(gòu)簡(jiǎn)單但是能夠滿足大多數(shù)圖形應(yīng)用需要的模型格式,而且它允許以ASCII碼格式或二進(jìn)制形式存儲(chǔ)文件。PLY的開發(fā)者希望,這樣一套既簡(jiǎn)單又靈活的文件格式,能夠幫助開發(fā)人員避免重復(fù)開發(fā)文件格式的問題。然而由于各種各樣的原因,在工業(yè)領(lǐng)域內(nèi),新的文件格式仍然在不斷的出現(xiàn),但是在圖形學(xué)的研究領(lǐng)域中,PLY還是種常用且重要的文件格式。
PLY作為一種多邊形模型數(shù)據(jù)格式,不同于三維引擎中常用的場(chǎng)景圖文件格式和腳本文件,每個(gè)PLY文件只用于描述一個(gè)多邊形模型對(duì)象(Object),該模型對(duì)象可以通過諸如頂點(diǎn)、面等數(shù)據(jù)進(jìn)行描述,每一類這樣的數(shù)據(jù)被稱作一種元素(Element)。相比于現(xiàn)代的三維引擎中所用到的各種復(fù)雜格式,PLY實(shí)在是種簡(jiǎn)單的不能再簡(jiǎn)單的文件格式,但是如果仔細(xì)研究就會(huì)發(fā)現(xiàn),就像設(shè)計(jì)者所說的,這對(duì)于絕大多數(shù)的圖形應(yīng)用來說已經(jīng)是足夠用了。
二、PLY結(jié)構(gòu)
PLY的文件結(jié)構(gòu)簡(jiǎn)單:文件頭加上元素?cái)?shù)據(jù)列表。其中文件頭中以行為單位描述文件類型、格式與版本、元素類型、元素的屬性等,然后就根據(jù)在文件頭中所列出元素類型的順序及其屬性,依次記錄各個(gè)元素的屬性數(shù)據(jù)。
典型的PLY文件結(jié)構(gòu):
頭部
頂點(diǎn)列表
面片列表
(其他元素列表)
頭部是一系列以回車結(jié)尾的文本行,用來描述文件的剩余部分。頭部包含一個(gè)對(duì)每個(gè)元素類型的描述,包括元素名(如“邊”),這個(gè)元素在工程里有多少,以及一個(gè)與這個(gè)元素關(guān)聯(lián)的不同屬性的列表。頭部還說明這個(gè)文件是二進(jìn)制的或者是ASCII的。頭部后面的是一個(gè)每個(gè)元素類型的元素列表,按照在頭部中描述的順序出現(xiàn)。
下面是一個(gè)立方體的完整ASCII描述。大括號(hào)中的注釋不是文件的一部分,它們是這個(gè)例子的注解。文件中的注釋一般在
“comment”開始的關(guān)鍵詞定義行里。
ply
format???ascii???1.0???{???ascii/二進(jìn)制,格式版本數(shù)???}
comment???made???by???anonymous???{???注釋關(guān)鍵詞說明,像其他行一樣???}
comment???this???file???is???a???cube
element???vertex???8???{???定義“vertex”(頂點(diǎn))元素,在文件中有8個(gè)???}
property???float32???x???{???頂點(diǎn)包含浮點(diǎn)坐標(biāo)“x”}
property???float32???y???{???y???坐標(biāo)同樣是一個(gè)頂點(diǎn)屬性???}
property???float32???z???{???z???也是坐標(biāo)???}
element???face???6???{???在文件里有6個(gè)“face”(面片)???}
property???list???uint8???int32???vertex_index???{???“vertex_indices”(頂點(diǎn)素引)是一列整數(shù)???}
end_header???{???劃定頭部結(jié)尾???}
0???0???0???{???頂點(diǎn)列表的開始???}
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?
這個(gè)例子說明頭部的基本組成。頭部的每個(gè)部分都是一個(gè)以關(guān)鍵詞開頭,以回車結(jié)尾的ASCII串。"ply"是文件的頭四個(gè)字符。
跟在文件頭部開頭之后的,是關(guān)鍵詞“format”和一個(gè)特定的ASCII或者二進(jìn)制的格式,接下來是一個(gè)版本號(hào)。
再下面是多邊形文件中每個(gè)元素的描述,在每個(gè)元素里還有多屬性的說明。一般元素以下面的格式描述:
element ? ?
property ? ?
property ? ?
property ? ?
屬性羅列在“element”(元素)行后面定義,既包含屬性的數(shù)據(jù)類型,也包含屬性在每個(gè)元素中出現(xiàn)的次序。一個(gè)屬性可以有三種數(shù)據(jù)類型:標(biāo)量,字符串和列表。屬性可能具有的標(biāo)量數(shù)據(jù)類型列表如下:
名稱 ???? 類型 ????????? 字節(jié)數(shù)
-------------------------------
int8 ?????? 字符??????????????????? 1
uint8 ???? 非負(fù)字符 ????????? 1
int16 ???? 短整型 ????????????? 2
uint16 ?? 非負(fù)短整型 ????? 2
int32 ???? 整型 ????????????????? 4
uint32 ?? 非負(fù)整型 ????????? 4
float32 ? 單精度浮點(diǎn)數(shù) ? 4
float64 ? 雙精度浮點(diǎn)數(shù) ? 8
這些字節(jié)計(jì)數(shù)很重要,而且在實(shí)現(xiàn)過程中不能修改以使這些文件可移植。
使用列表數(shù)據(jù)類型的屬性定義有一種特殊的格式:property ? list ? ? ? ,這種格式,一個(gè)非負(fù)字符表示在屬性里包含多少索引,接下來是一個(gè)列表包含許多整數(shù)。在這個(gè)邊長列表里的每個(gè)整數(shù)都是一個(gè)頂點(diǎn)的索引。
另外一個(gè)立方體定義:
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???{???頂點(diǎn)顏色開始???}
property???green???uint8
property???blue???uint8
element???face???7
property???list???uint8???int32???vertex_index???{???每個(gè)面片的頂點(diǎn)個(gè)數(shù)???}
element???edge???5???{???物體里有5條邊???}
property???int32???vertex1???{???邊的第一個(gè)頂點(diǎn)的索引???}
property???int32???vertex2???{???第二個(gè)頂點(diǎn)的索引???}
property???uint8???red???{???邊顏色開始???}
property???uint8???green
property???uint8???blue
end_header
0???0???0???255???0???0???{???頂點(diǎn)列表開始???}
0???0???1???255???0???0
0???1???1???255???0???0
0???1???0???255???0???0
1???0???0???0???0???255
1???0???1???0???0???255
1???1???1???0???0???255
1???1???0???0???0???255
3???0???1???2???{???面片列表開始,從一個(gè)三角形開始???}
3???0???2???3???{???另一個(gè)三角形???}
4???7???6???5???4???{???現(xiàn)在是一些四邊形???}
4???0???4???5???1
4???1???5???6???2
4???2???6???7???3
4???3???7???4???0
0???1???255???255???255???{???邊列表開始,從白邊開始???}
1???2???255???255???255
2???3???255???255???255
3???0???255???255???255
2???0???0???0???0???{???以一個(gè)黑線結(jié)束???}
這個(gè)文件為每個(gè)頂點(diǎn)指定一個(gè)紅、綠、藍(lán)值。
為了說明變長vertex_index(頂點(diǎn)索引)的能力,物體的頭兩個(gè)面片是兩個(gè)三角形而不是一個(gè)四邊形。這意味著物體的面片數(shù)是7。這個(gè)物體還包括一個(gè)邊列表。每條邊包括兩個(gè)指向說明邊的頂點(diǎn)的指針。每條邊也有一種顏色。上面定義的五條邊指定了顏色,使文件里的兩個(gè)三角形高亮。前四條邊白色,它們包圍兩個(gè)三角形。最后一條邊是黑的,他是分割三角形的邊。
三、用戶定義元素
上面的例子顯示了頂點(diǎn)、面片和邊三種元素的用法。PLY ? 格式同樣允許用戶定義它們自己的元素。定義新元素的格式于頂點(diǎn)、面片和邊相同。這是頭部定義材料屬性的部分:
element???material???6
property???ambient_red???uint8???{???環(huán)繞顏色???}
property???ambient_green???uint8
property???ambient_blue???uint8
property???ambient_coeff???float32
property???diffuse_red???uint8???{???擴(kuò)散(diffuse)顏色???}
property???diffuse_green???uint8
property???diffuse_blue???uint8
property???diffuse_coeff???float32
property???specular_red???uint8???{???鏡面(specular)顏色???}
property???specular_green???uint8
property???specular_blue???uint8
property???specular_coeff???float32
property???specular_power???float32???{???Phong???指數(shù)???}
這些行應(yīng)該在頭部頂點(diǎn)、面片和邊的說明后直接出現(xiàn)。如果我們希望每個(gè)頂點(diǎn)有一個(gè)材質(zhì)說明,我們可以將這行加在頂點(diǎn)屬性末尾:property ? material_index ? int32
這個(gè)整數(shù)現(xiàn)在是一個(gè)到文件內(nèi)包含的材質(zhì)列表的索引。這可能誘使一個(gè)新應(yīng)用的作者編制一些信的元素保存在PLY文件中。
以下是常用的elements 和 properties 原地址?http://www.mathworks.com/matlabcentral/fx_files/5459/1/content/ply.htm
Common Elements and Properties
While the PLY format has the flexibility to define many types of elements and properities, a common set of elements are understood between programs to communicate common 3D data types. Turk suggests elements and
property names that programs should try to make standard.
Element
Property
Data Type
Property Description
vertex
x
y
z
float
float
float
x,y,z coordinates
nx
ny
nz
float
float
float
x,y,z components of normal
red
green
blue
alpha
uchar
uchar
uchar
uchar
vertex color
amount of transparency
material_index
int
index to list of materials
face
vertex_indices
list of int
indices to vertices
back_red
back_green
back_blue
uchar
uchar
uchar
backside color
edge
vertex1
vertex2
int
int
index to vertex
index to other vertex
crease_tag
uchar
crease in subdivision surface
material
red
green
blue
alpha
uchar
uchar
uchar
uchar
material color
amount of transparency
reflect_coeff
refract_coeff
refract_index
extinct_coeff
float
float
float
float
amount of light reflected
amount of light transmitted
index of refraction
extinction coefficient
*?- required "core" properties in red
For most applications, the minimum necessary information is vertex and face data. To make it easier for programs to interpret PLY files, the element properties listed in red should always be included. If there is
no face data (as in the case of point-cloud data) the face element could be defined with an element count of zero. The other elements and properties are suggested names for often used information like material parameters and edge information.
總結(jié)
以上是生活随笔為你收集整理的ply补全为立方体_PLY文件格式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单级联动
- 下一篇: 计算数字的位数并逆序输出