PLY檔案格式及其解析

來源:互聯網
上載者:User

Ply檔案格式是Stanford大學開發的一套三維mesh模型資料格式,圖形學領域內很多著名的模型資料,比如Stanford的三維掃描資料庫[1](其中包括很多文章中會見到的Happy Buddha、Dragon、Bunny兔子),Geogia Tech的大型幾何模型庫[3],北卡(UNC)的電廠模型[4]等,最初的模型都是基於這個格式的。

PLY多邊形檔案格式的開發目標是建立一套針對多邊形模型的,結構簡單但是能夠滿足大多數圖形應用需要的模型格式,而且它允許以ASCII碼格式或二進位形式隱藏檔。PLY的開發人員希望,這樣一套既簡單又靈活的檔案格式,能夠協助開發人員避免重複開發檔案格式的問題。然而由於各種各樣的原因,在工業領域內,新的檔案格式仍然在不斷的出現,但是在圖形學的研究領域中,PLY還是種常用且重要的檔案格式。

PLY作為一種多邊形模型資料格式,不同於三維引擎中常用的情境圖檔案格式和指令檔,每個PLY檔案只用於描述一個多邊形模型對象(Object),該模型對象可以通過諸如頂點、面等資料進行描述,每一類這樣的資料被稱作一種元素(Element)。相比於現代的三維引擎中所用到的各種複雜格式,PLY實在是種簡單的不能再簡單的檔案格式,但是如果仔細研究就會發現,就像設計者所說的,這對於絕大多數的圖形應用來說已經是足夠用了。

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

下面這個例子是一個典型的ASCII格式的PLY檔案,其所描述的是一個立方體。

ply

format ascii 1.0             ...{ 檔案類型:ascii或binary,版本號碼 }

comment made by anonymous   ... { 注釋行 }

comment this file is a cube  ...{ 注釋行 }

element vertex 8             ...{ 定義“頂點”元素,其數量為8個 }

property float32 x           ...{ 頂點的x屬性,資料類型為float32 }

property float32 y           ...{ 頂點的x屬性,資料類型為float32 }

property float32 z           ...{ 頂點的x屬性,資料類型為float32 }

element face 6               ...{ 定義“面”元素,其數量為6個 }

property list uint8 int32 vertex_index ...{ 面的頂點索引屬性,類型為uint8的列表 }

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

從這個檔案的檔案頭可以看到,檔案定義的對象由8個頂點元素和6個多邊形面元素組成,其中頂點元素包括x、y、z三個屬性,其在檔案中均為32位浮點類型,而多邊形面元素則只包括一個頂點索引列表的屬性,作為一個列表屬性,它包括兩部分,即列表元素的數量(uint8類型)及各個列表元素(int32類型),其中每個列表屬性的資料包括4個列表元素,分別表示每個多邊形面的4個頂點的索引。

PLY格式支援如下的資料類型。 

name        type        number of bytes

---------------------------------------

int8       character                       1

uint8      unsigned character        1

int16      short integer                 2

uint16     unsigned short integer  2

int32      integer                          4

uint32     unsigned integer           4

float32    single-precision float    4

float64    double-precision float  8

但是需要注意,由於PLY格式的開放性,有些PLY檔案的解析程式不支援全部的資料類型,也有的PLY檔案採用自訂的資料類型,這些都有可能導致檔案解析過程的失敗。(我在一次將PLY檔案載入到Ogre應用的時候,出於測試的目的手動寫了一個PLY檔案,載入總是失敗,反覆尋找才發現原來是檔案中寫的頂點格式為uint32,載入程式根本不支援。)

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

property <data-type> <property-name-1>

以及列表屬性方式:

property list <numerical-type> <numerical-type> <property-name>

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

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

PLY檔案格式的規範及其解析的原始碼都是開放的,可以從參考文獻中找到相關的下載。最著名的就是Greg Turk在1994年發布的解析代碼,Turk似乎也是PLY格式的開發人員之一,因為我參考的“The PLY Polygon File Format”就是他寫的。我現在用的就是Turk的代碼,很方便也挺穩定的,有機會會把結構分析一下。

參考文獻

1.The Stanford 3D Scanning Repository

2.MAC+PC+UNIX PLY reading/writing

3. Large Geometry Models Archieve

4. Power Plant Model

5. The PLY Polygon File Format

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.