1. 程式人生 > >【3D】幾何物體——三角網格的表示與顯示(obj)

【3D】幾何物體——三角網格的表示與顯示(obj)

OBJ檔案格式

OBJ是一種標準的3D模型檔案格式;軟體:3dsMax,LightWare,Maya都支援OBJ檔案的讀寫;

OBJ是以純文字的形式儲存了模型的頂點、法線和紋理座標和材質使用資訊;

格式:字首引數1 引數2 引數3.......

字首

說明

v

表示本行指定一個頂點 

此字首後跟著3個單精度浮點數,分別表示頂點的x,y,z座標值

vt

表示本行指定一個紋理座標 

此字首後跟著兩個單精度浮點數,分別表示此紋理座標的u,v值

vn

表示本行指定一個法線向量 

此字首後跟著3個單精度浮點數,分別表示頂點法向量x,y,z座標值

f

表示本行指定一個表面(Face) 

此字首後面的資料見“面的格式說明”

usemtl

此字首後只跟著一個引數。該引數指定了從此行之後到下一個以usemtl開頭的行

之間的所有表面所使用的材質名稱。該材質可以在此OBJ檔案所附屬的MTL檔案

中找到具體資訊。

mtllib

此字首後只跟著一個引數,該引數指定了此OBJ檔案所使用的材質庫檔案(*.mtl)

的檔案路徑

面的格式說明:

f  頂點座標索引 / 紋理座標索引 / 頂點法向索引

f Vertex / Texture / Normal

其中,紋理座標索引/頂點法向索引可以為空;

f 1 2 3 等同於 f 1// 2// 3//

f 1/3 2/5 3/4 (頂點法向索引為空)

f 1/3/4 2/5/6 3/4/2

f 1//4 2//6 3//2

obj格式對紋理的支援是通過關鍵字mtllib指定的;

newmtl blinn1SG 

illum 4 

Ka 0.2 0.2 0.2 

Kd 1 1 1 

Ks 0.2 0.2 0.2 

Tf 1.00 1.00 1.00 

map_Kd carp.bmp

Ka——物體材質中環境光的顏色

Kd——物體材質中漫反射光的顏色

Ks——物體材質中鏡面光顏色

map_Kd——紋理影象的路徑

三角網格的資料結構

三角網格的資料由幾何和連線關係組成;

幾何包括頂點的x,y,z座標及頂點的法向量等;

連線關係即三角網格是如何連在一塊的;

常用的三角網格資料結構包括:

頂點-邊(Vertex-Edge)

頂點-面(Vertex-Face)

鄰接矩陣 和 鄰接表

頂點-邊-面

半邊結構(half Edge)

紋理資料

obj檔案中不但包含頂點幾何座標,還可以指定紋理資料,mtllib命令指定了材質屬性的檔案,材質屬性檔案中可以指定紋理影象所在的檔案。紋理的顯示包含三個步驟:

1、生成紋理資料

2、將紋理資料載入紋理記憶體

3、將紋理資料對映到物體表面

mtl 格式檔案

newmtl name #name為材質名稱

Ns exponent #exponent指定材質的反射指數,定義了反射高光度

Ka r g b #環境光反射,g和b兩引數是可選的,如果只指定了r的值,則g和b的值都等於r的值

Kd r g b #漫反射

Ks r g b #鏡面光反射

# Ka Kd Ks 都還有其他兩種格式,可查閱其他資料:

#Kd spectral file.rfl factor

#Kd xyz x y z

map_Kd picture.png #固有紋理貼圖

map_Ka picture1.png #陰影紋理貼圖

map_Ks picture2.png #高光紋理貼圖 illum 2

#光照模型

#光照模型屬性如下:

#0. 色彩開,陰影色關

#1. 色彩開,陰影色開

#2. 高光開

#3. 反射開,光線追蹤開

#4. 透明: 玻璃開 反射:光線追蹤開

#5. 反射:菲涅爾衍射開,光線追蹤開

#6. 透明:折射開 反射:菲涅爾衍射關,光線追蹤開

#7. 透明:折射開 反射:菲涅爾衍射開,光線追蹤開

#8. 反射開,光線追蹤關

#9. 透明: 玻璃開 反射:光線追蹤關

#10. 投射陰影於不可見表面