最近寫圖形學作業,需要讀取obj檔案並進行解析,所以學習了一下obj檔案的格式,參考了一些部落格,侵刪。
obj(或者.obj)是一種幾何定義檔案格式,檔案格式是公開的,並能很好的在其他的3d應用中被支援。obj檔案格式是一種簡單的單獨表示3d幾何圖元的檔案格式——也就是,頂點的座標,每個頂點紋理的uv座標,頂點法向量,以及組成多邊形的面的頂點座標、以及紋理uv座標序列。面的頂點預設為逆時針順序,法向量不是必須的。obj檔案並非歸一化的,但是可以在注釋中加入縮放資訊。
obj檔案可以是ascii的編碼(.obj)方式也可以是二進位制格式(.mod)。以ascii格式儲存的obj檔案必須用.obj作為檔案拓展名。
以雜湊字元(#)開始的一行表示注釋。
乙個obj格式的檔案可能包含了頂點資料,自由形式的曲面/表面屬性,繪製索引序列,自由形式的曲面/表面內容宣告,關聯自由形式的表面,組和渲染屬性資訊。大多數常見的繪製索引表現為幾何頂點,紋理座標,頂點法線以及多邊形的面:
乙個頂點可以用字元v開頭的一行來表示。接著後面跟上(x, y, z [w])的值來表示頂點座標。w是可選項,預設為1.0。一些應用支援頂點顏色,通過在x y z後面跟上red, green, blue值來表示。顏色值的範圍為0到1.0。
自由形式的幾何圖元宣告可以使用字元vp開頭的行來表示,用於定義乙個曲面或者平面的引數空間中的頂點。"u"只能在曲面頂點中使用,u和v用於表示non-rational剪裁曲面的點,而u,v以及w表示rational剪裁曲面的點。
表面通過乙個包含頂點,紋理以及法線索引的序列來表示。類似四邊形這種多邊形可以通過多於三個包含頂點/紋理/法線索引來定義。
obj檔案也支援自由形式的使用曲面和表現來定義物件的幾何圖元,例如nurbs表面。
頂點索引
乙個合法的頂點索引符合上面定義的頂點序列格式。如果乙個索引是正值則表示相對於頂點序列從1開始的偏移。如果乙個索引是負的,表示從頂點序列結尾的偏移,從-1開始。
每個面都可以包含三個或者更多的頂點。
f v1 v2 v3 ....
紋理座標索引
在描述乙個平面的時候,紋理座標索引作為可選項用於描述該頂點相關的紋理座標。為了描述紋理座標索引,必須在頂點座標索引之後緊密新增一根斜線(/),之後再緊密新增紋理座標索引。在斜線的前後都不能有空格。乙個合法的紋理座標索引從1開始,並符合之前描述的格式。每個面可以包含三個或者更多的單元。
f v1/vt1 v2/vt2 v3/vt3 ...
頂點法線索引
法線索引用於描述頂點的法向量,在描述面的時候是可選項。要新增頂點法線索引,必須在紋理索引之後新增第二根斜線(/),然後在之後新增法線索引。斜線前後不能有空格。合法的法線索引從1開始,並符合之前面描述的格式。每個面可以包含三個或者更多的單元。
f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ...
頂點座標法線索引(不包含紋理索引)
可以在定義幾何圖元的時候忽略紋理座標索引,但是必須在頂點座標索引後加上兩根斜線(//),然後新增法線索引。
f v1//vn1 v2//vn2 v3//vn3 ...
其他幾何格式
obj檔案採用若干差值方法來支援高階表面,例如泰勒和b差值,儘管支援這些特性要使用一些非標準的第三方檔案。obj檔案不支援網格分級或者任何其他形式的動畫或形變,例如頂點蒙皮或紋理變形。
材質引用
描述多邊形的可見屬性儲存在外部的.mtl檔案中。obj檔案可能會引用超過乙個的.mtl檔案。.mtl檔案可能包含乙個或者多個不同命名的材質定義。
mtllib [external .mtl file name]
...
通過繪製單元之後的這個標籤來指明使用的材質。材質名稱必須和外部定義的.mtl檔名稱匹配。
usemtl [material name]
...
objects名稱和多邊形group標籤
o [object name]
...g [group name]
...
單個obj檔案中可以包含多個object標籤或group標籤。
其中,o標籤和g標籤僅僅是在組織上進行分組而存在的,例如乙個o標籤下,可能包含多個g,或者乙個g開頭的頂點資料集合之後包含多個g組織描述的三角面。也有將usemtl標籤作為網格分組的,原因是考慮了同一組網格使用了相同的紋理。但有個不方面的地方就是對於需要單個控制的地方,略顯不便。例如乙個o或者g標籤的資料集合表示人臉,之後眼睛,耳朵,鼻子等五官分作不同的g來組織,使用同乙個紋理。採用usemtl分組的話,如果想對眼睛,嘴巴,等進行單獨變換的時候很不方便。因此,本人還是採用g來進行網格劃分。
通常處理obj檔案的時候,會拋棄頂點法線資料,而通過頂點資訊來進行計算。有了以上的頂點座標、法線、紋理座標等資訊,就可以進行3d模型檔案的渲染了。
OBJ檔案格式的詳細介紹
格式 v x y z 意義 每個頂點的座標 格式 vt u v w 意義 繪製模型的三角麵片時,每個頂點取畫素點時對應的紋理上的座標。紋理的座標指的是,紋理如果被放在螢幕上顯示時,以螢幕左下角為原點的座標。注意 w一般用於形容三維紋理,大部分是用不到的,基本都為0。格式 vn x y z 意義 繪製...
elf檔案格式學習
elf 檔案格式學習 文章出處 結合例項解讀 elf檔案 閱讀筆記 bkbll bkbll cnhonker.net,kbll tom.com 自unix 系統實驗室 usl 開發和發布了 executable and linking format elf 這樣的二進位制格式以後,在 nix 系統上...
PE 檔案格式學習
以前總在網上看看介紹pe檔案格式的文章,看的時候看到一大堆的結構體就蛋疼了,想想現在我這個居然都不清楚以後咋裝bi呢 今天下了個peview邊看變學了 先自己隨便寫個控制台程式,然後加進去就有了,讓後我們可以看看這個檔案到底是怎麼組成的。從這個樹形結構我們能很清楚的理解這個檔案的整體構成,在網上有很...