【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. 投射陰影於不可見表面