ply模型格式解析與Loader編寫

2021-07-03 06:24:23 字數 2437 閱讀 4405

ply作為一種多邊形模型資料格式,不同於三維引擎中常用的場景**件格式和指令碼檔案,每個ply檔案只用於描述乙個多邊形模型物件object,該模型物件可以通過諸如頂點、麵等資料進行描述,被統稱作元素element。

ply的檔案結構是 檔案頭+資料列表。其中檔案頭以行為單位描述檔案型別、格式與版本、元素型別、元素的屬性等。資料列表根據檔案頭中所列出元素型別的順序及其屬性,以文字字元或二進位制依次儲存各個資料。

對於元素的屬性定義方式,ply允許單一屬性定義:

property

以及列表屬性方式:

property list

其中第乙個資料型別描述列表元素數量,第二個資料型別描述每個列表元素。

除了頂點和多邊形面兩種基本元素外,ply檔案格式允許使用自定義的元素和元素屬性,稱為other element和other property。只要遵循檔案格式中對元素及元素屬性的格式定義,就能夠被正常的解析,這也是ply格式所具備的靈活性特色。

典型的.ply檔案(由mve生成)如下:

ply

format binary_little_endian 1.0

comment export generated by libmve

element vertex 570204

property float x

property float y

property float z

property uchar red

property uchar green

property uchar blue

property float confidence

property float value

element face 1103868

property list uchar int vertex_indices

end_header

後跟二進位制數值

例如x y z red green blue confidence value

0.00.1

0.2255

255255

1.01.0

......

.....共570204行...

......

......

list_count 本面的頂點個數 uchar型別

vertex_indices 到對應頂點的索引 int型別 從0開始41

234...

......

..共1103868行...

......

......

其中value欄位是mve特有的,用於定義the scale of the samples比例

ply支援如下資料型別:

name

type

bytes

int8

character

1uint8

unsigned character

1int16

short integer

2uint16

unsigned short integer

2int32

integer

4uint32

unsigned integer

4float32

single-precision float

4float64

double-precision float8

鑑於ply檔案允許使用自定義的元素和元素屬性,允許動態列表長度,故其loader需要構建乙個動態的樹狀資料結構,並允許動態型別。

ply檔案頭給出了檔案格式和大小端資訊後,後面即開始了對於資料結構的說明。

樹狀結構如下:

element 名稱1 數量

property 型別 名稱1

property 型別 名稱2

........

element 名稱2 數量

property 型別 名稱1

property 型別 名稱2

........

element 名稱3 數量

property list uchar 型別 名稱1

property list uchar 型別 名稱2

//變長列表,由list值決定後面元素的個數

定義elementformat類和propertyformat類儲存以上格式資訊

實際資料儲存到類

class element

;

class property

;};

注意到,實際儲存資料時一般都有多個element,所以理論上還應該有elementlist這種型別

TLV格式解析與打包

tlv,簡單理解就是type,length,value。是一種結構化的資料。一般type為4個位元組的列舉,length為4個位元組,表示value的長度。value即為實際的值。tlv直接可以巢狀,比如大的tlv中的value又是乙個tlv。下面有個小例子幫助理解。include include ...

OSI參考模型與TCP IP模型層次解析

osi參考模型 物理層物理層處於osi的最底層,是整個開放系統的基礎。物理層涉及通訊道上傳輸的原始位元流 bits 它的功能主要是為資料端裝置提供傳送資料的通絡以及傳輸資料 資料鏈路層 資料鏈路層的主要任務是實現計算機網路中相鄰節點之間的可靠傳輸,吧原始的有差錯的物理傳輸線路加上資料鏈路協議以後,構...

Bmp格式與程式設計讀取解析

影象載入函式,通過bmp路徑,載入影象資料,通過類建構函式來實現。digitalimage digitalimage lpctstr lpszpath 為位 件頭分配空間,並初始化為0 m lpbmpfileheader lpbitmapfileheader new byte sizeof bitm...