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. 投射陰影於不可見表面
學習OpenGL (四) 3D空間中的三角形
gl s圖元通過連線三個頂點繪製三角形,得到如圖所示的三角形 頂點的指定次序以及方向的組合稱為環繞,圖中三角形是被認為具有順時針方向的環繞。在預設情況下,opengl認為逆時針方向環繞的一面是多邊形的正面,因此圖中的三角形為圖形的反面。如果想改變opengl這一預設行為,可以呼叫如下函式 glfro...
3D空間中射線與三角形的交叉檢測演算法
射線ray,在3d圖形學中有很多重要的應用。比如,pick操作就是使用射線ray來實現的,還有諸如子彈射線的碰撞檢測等等都可以使用射線ray來完成。所以,在本次部落格中,將會簡單的像大家介紹下,如何進行ray 的交叉檢測。在tomas moller的mt97 中,提出了一種新的演算法。這種演算法能夠...
3D空間中射線與三角形的交叉檢測演算法
射線ray,在3d圖形學中有非常多重要的應用。比方,pick操作就是使用射線ray來實現的,還有諸如子彈射線的碰撞檢測等等都能夠使用射線ray來完畢。所以,在本次部落格中,將會簡單的像大家介紹下。怎樣進行ray 的交叉檢測。在tomas moller的mt97 中,提出了一種新的演算法。這樣的演算法...