ply补全为立方体_PLY文件格式
一、PLY簡介
PLY文件格式是Stanford大學開發(fā)的一套三維mesh模型數(shù)據(jù)格式,圖形學領域內(nèi)很多著名的模型數(shù)據(jù),比如Stanford的三維掃描數(shù)據(jù)庫(其中包括很多文章中會見到的Happy?Buddha, Dragon, Bunny兔子),Geogia Tech的大型幾何模型庫,北卡(UNC)的電廠模型等,最初的模型都是基于這個格式的。
PLY多邊形文件格式的開發(fā)目標是建立一套針對多邊形模型的,結構簡單但是能夠滿足大多數(shù)圖形應用需要的模型格式,而且它允許以ASCII碼格式或二進制形式存儲文件。PLY的開發(fā)者希望,這樣一套既簡單又靈活的文件格式,能夠幫助開發(fā)人員避免重復開發(fā)文件格式的問題。然而由于各種各樣的原因,在工業(yè)領域內(nèi),新的文件格式仍然在不斷的出現(xiàn),但是在圖形學的研究領域中,PLY還是種常用且重要的文件格式。
PLY作為一種多邊形模型數(shù)據(jù)格式,不同于三維引擎中常用的場景圖文件格式和腳本文件,每個PLY文件只用于描述一個多邊形模型對象(Object),該模型對象可以通過諸如頂點、面等數(shù)據(jù)進行描述,每一類這樣的數(shù)據(jù)被稱作一種元素(Element)。相比于現(xiàn)代的三維引擎中所用到的各種復雜格式,PLY實在是種簡單的不能再簡單的文件格式,但是如果仔細研究就會發(fā)現(xiàn),就像設計者所說的,這對于絕大多數(shù)的圖形應用來說已經(jīng)是足夠用了。
二、PLY結構
PLY的文件結構簡單:文件頭加上元素數(shù)據(jù)列表。其中文件頭中以行為單位描述文件類型、格式與版本、元素類型、元素的屬性等,然后就根據(jù)在文件頭中所列出元素類型的順序及其屬性,依次記錄各個元素的屬性數(shù)據(jù)。
典型的PLY文件結構:
頭部
頂點列表
面片列表
(其他元素列表)
頭部是一系列以回車結尾的文本行,用來描述文件的剩余部分。頭部包含一個對每個元素類型的描述,包括元素名(如“邊”),這個元素在工程里有多少,以及一個與這個元素關聯(lián)的不同屬性的列表。頭部還說明這個文件是二進制的或者是ASCII的。頭部后面的是一個每個元素類型的元素列表,按照在頭部中描述的順序出現(xiàn)。
下面是一個立方體的完整ASCII描述。大括號中的注釋不是文件的一部分,它們是這個例子的注解。文件中的注釋一般在
“comment”開始的關鍵詞定義行里。
ply
format???ascii???1.0???{???ascii/二進制,格式版本數(shù)???}
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”(頂點素引)是一列整數(shù)???}
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?
這個例子說明頭部的基本組成。頭部的每個部分都是一個以關鍵詞開頭,以回車結尾的ASCII串。"ply"是文件的頭四個字符。
跟在文件頭部開頭之后的,是關鍵詞“format”和一個特定的ASCII或者二進制的格式,接下來是一個版本號。
再下面是多邊形文件中每個元素的描述,在每個元素里還有多屬性的說明。一般元素以下面的格式描述:
element ? ?
property ? ?
property ? ?
property ? ?
屬性羅列在“element”(元素)行后面定義,既包含屬性的數(shù)據(jù)類型,也包含屬性在每個元素中出現(xiàn)的次序。一個屬性可以有三種數(shù)據(jù)類型:標量,字符串和列表。屬性可能具有的標量數(shù)據(jù)類型列表如下:
名稱 ???? 類型 ????????? 字節(jié)數(shù)
-------------------------------
int8 ?????? 字符??????????????????? 1
uint8 ???? 非負字符 ????????? 1
int16 ???? 短整型 ????????????? 2
uint16 ?? 非負短整型 ????? 2
int32 ???? 整型 ????????????????? 4
uint32 ?? 非負整型 ????????? 4
float32 ? 單精度浮點數(shù) ? 4
float64 ? 雙精度浮點數(shù) ? 8
這些字節(jié)計數(shù)很重要,而且在實現(xiàn)過程中不能修改以使這些文件可移植。
使用列表數(shù)據(jù)類型的屬性定義有一種特殊的格式:property ? list ? ? ? ,這種格式,一個非負字符表示在屬性里包含多少索引,接下來是一個列表包含許多整數(shù)。在這個邊長列表里的每個整數(shù)都是一個頂點的索引。
另外一個立方體定義:
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???{???每個面片的頂點個數(shù)???}
element???edge???5???{???物體里有5條邊???}
property???int32???vertex1???{???邊的第一個頂點的索引???}
property???int32???vertex2???{???第二個頂點的索引???}
property???uint8???red???{???邊顏色開始???}
property???uint8???green
property???uint8???blue
end_header
0???0???0???255???0???0???{???頂點列表開始???}
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???{???面片列表開始,從一個三角形開始???}
3???0???2???3???{???另一個三角形???}
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???{???以一個黑線結束???}
這個文件為每個頂點指定一個紅、綠、藍值。
為了說明變長vertex_index(頂點索引)的能力,物體的頭兩個面片是兩個三角形而不是一個四邊形。這意味著物體的面片數(shù)是7。這個物體還包括一個邊列表。每條邊包括兩個指向說明邊的頂點的指針。每條邊也有一種顏色。上面定義的五條邊指定了顏色,使文件里的兩個三角形高亮。前四條邊白色,它們包圍兩個三角形。最后一條邊是黑的,他是分割三角形的邊。
三、用戶定義元素
上面的例子顯示了頂點、面片和邊三種元素的用法。PLY ? 格式同樣允許用戶定義它們自己的元素。定義新元素的格式于頂點、面片和邊相同。這是頭部定義材料屬性的部分:
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???{???擴散(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ù)???}
這些行應該在頭部頂點、面片和邊的說明后直接出現(xiàn)。如果我們希望每個頂點有一個材質(zhì)說明,我們可以將這行加在頂點屬性末尾:property ? material_index ? int32
這個整數(shù)現(xiàn)在是一個到文件內(nèi)包含的材質(zhì)列表的索引。這可能誘使一個新應用的作者編制一些信的元素保存在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.
總結
以上是生活随笔為你收集整理的ply补全为立方体_PLY文件格式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单级联动
- 下一篇: SQLServer 联合查询