ply補全為立方體 PLY格式檔案具體解釋

2021-10-18 12:50:59 字數 4438 閱讀 2165

一、ply簡單介紹

ply多邊形檔案格式的開發目標是建立一套針對多邊形模型的,結構簡單可是可以滿足大多數圖形應用須要的模型格式,並且它同意以ascii碼格式或二進位制形式儲存檔案。ply的開發人員希望。這樣一套既簡單又靈活的檔案格式,可以幫助開發人員避免反覆開發檔案格式的問題。然而因為各種各樣的原因,在工業領域內,新的檔案格式仍然在不斷的出現,可是在圖形學的研究領域中,ply還是種經常使用且關鍵的檔案格式。

ply作為一種多邊形模型資料格式,不同於三維引擎中經常使用的場景**件格式和指令碼檔案。每乙個ply檔案僅僅用於描寫敘述乙個多邊形模型物件(object),該模型物件能夠通過諸如頂點、麵等資料進行描寫敘述,每一類這種資料被稱作一種元素(element)。相比於現代的三維引擎中所用到的各種複雜格式。ply實在是種簡單的不能再簡單的檔案格式,可是假設細緻研究就會發現,就像設計者所說的,這對於絕大多數的圖形應用來說已經是足夠用了。

二、ply結構

ply的檔案結構簡單:檔案頭加上元素資料列表。當中檔案頭中以行為單位描寫敘述檔案型別、格式與版本號、元素型別、元素的屬性等,然後就依據在檔案頭中所列出元素型別的順序及其屬性,依次記錄各個元素的屬性資料。

典型的ply檔案結構:

頭部頂點列表

麵片列表

(其它元素列表)

頭部是一系列以回車結尾的文字行。用來描寫敘述檔案的剩餘部分。

頭部包括乙個對每乙個元素型別的描寫敘述,包括元素名(如「邊」)。這個元素在project裡有多少,以及乙個與這個元素關聯的不同屬性的列表。頭部還說明這個檔案是二進位制的或者是ascii的。頭部後面的是乙個每乙個元素型別的元素列表,依照在頭部中描寫敘述的順序出現。

plyformat   ascii   1.0   

comment   this   file   is   a   cube

element   vertex   8   

property   float32   x   

property   float32   y   

property   float32   z   

element   face   6   

property   list   uint8   int32   vertex_index   

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 

再以下是多邊形檔案裡每乙個元素的描寫敘述。在每乙個元素裡還有多屬性的說明。

一般元素以以下的格式描寫敘述:

element    

property    

property    

property    

屬性羅列在「element」(元素)行後面定義,既包括屬性的資料型別,也包括屬性在每乙個元素**現的次序。乙個屬性能夠有三種資料型別:標量,字串和列表。

屬性可能具有的標量資料型別列表例如以下:

名稱      型別           位元組數

int8        字元                    1

uint8      非負字元           1

int16      短整型               2

uint16    非負短整型       2

int32      整型                   4

uint32    非負整型           4

float32   單精度浮點數   4

float64   雙精度浮點數   8

這些位元組計數非常重要,並且在實現過程中不能改動以使這些檔案可移植。

使用列表資料型別的屬性定義有一種特殊的格式:property   list       ,這樣的格式,乙個非負字元表示在屬性裡包括多少索引,接下來是乙個列表包括很多整數。在這個邊長列表裡的每乙個整數都是乙個頂點的索引。

另外乙個立方體定義:

plyformat   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

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   

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(頂點索引)的能力,物體的頭兩個麵片是兩個三角形而不是乙個四邊形。

這意味著物體的麵片數是7。

這個物體還包含乙個邊列表。

每條邊包含兩個指向說明邊的頂點的指標。每條邊也有一種顏色。上面定義的五條邊指定了顏色,使檔案中的兩個三角形高亮。

前四條邊白色。它們包圍兩個三角形。最後一條邊是黑的,他是切割三角形的邊。

三、使用者定義元素

上面的樣例顯示了頂點、麵片和邊三種元素的使用方法。ply   格式相同同意使用者定義它們自己的元素。定義新元素的格式於頂點、麵片和邊相同。這是頭部定義材料屬性的部分:

element   material   6

property   ambient_red   uint8   

property   ambient_green   uint8

property   ambient_blue   uint8

property   ambient_coeff   float32

property   diffuse_red   uint8   

property   diffuse_green   uint8

property   diffuse_blue   uint8

property   diffuse_coeff   float32

property   specular_red   uint8   

property   specular_green   uint8

property   specular_blue   uint8

property   specular_coeff   float32

property   specular_power   float32   

這些行應該在頭部頂點、麵片和邊的說明後直接出現。假設我們希望每乙個頂點有乙個材質說明,我們能夠將這行加在頂點屬性末尾:property   material_index   int32

這個整數如今是乙個到檔案內包括的材質列表的索引。這可能誘使乙個新應用的作者編制一些信的元素儲存在ply檔案裡。

ply補全為立方體 PLY 檔案結構

典型的 ply 檔案結構 頭部頂點列表 麵片列表 其他元素列表 頭部是一系列以回車結尾的文字行,用來描述檔案的剩餘部分。頭部包含乙個對每個元素型別的描述,包括元素名 如 邊 這個元素在工程裡有多少,以及乙個與這個元素關聯的不同屬性的列表。頭部還說明這個檔案是二進位制的或者是ascii的。頭部後面的是...

資料立方體

總體介紹 首先模擬乙個資料分析場景,某企業積累了如下 所示的銷售資料 中每一行表示某個時間段內某種商品在某個地區的銷售情況。很明顯,這些資料涉及到了時間 地區 產品三個業務角度。在對這樣的資料進行分析時,不同的角色都會基於自己所感興趣的業務角度提出問題 銷售經理關心各個地區的銷售情況,希望找出銷售增...

建立立方體

imanualobject cube cube scenemgr.createmanualobject cube cube.begin examples anchor operationtype.ot list 頂點 cube.position 100,100,100 0 cube.position...