ply檔案格式詳細說明

2021-07-30 07:21:38 字數 4285 閱讀 1935

典型的   ply   檔案結構: 

頭部 頂點列表 

麵片列表 

(其他元素列表) 

頭部是一系列以回車結尾的文字行,用來描述檔案的剩餘部分。頭部包含乙個對每個元素型別的描述,包括元素名(如「邊」),這個元素在工程裡有多少,以及一 個與這個元素關聯的不同屬性的列表。頭部還說明這個檔案是二進位制的或者是ascii的。頭部後面的是乙個每個元素型別的元素列表,按照在頭部中描述的順序 出現。 

ply 

format   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   《資料型別》   《屬性名-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 

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的。頭部後面的...

scandef格式詳細說明

1 scan chain number 例子 scanchains 8 表示stub chain的個數,與設計中的實際scan chain個數不一定相同。例如,因retiming dff的插入,一條實際的scan chain在scandef中可能被拆分成兩條stub chain。該類stub cha...

Format格式詳細說明

rust中一系列的巨集,如 println format write writeln 等,都是用的同樣的格式控制規則 fn main 1 預設用法,列印display println 9 八進位制 println 255 十六進製制 小寫 println 255 十六進製制 大寫 println 0...