年後回來乙個多月基本上都在研究opengl的東西~由於c++,qt和三維的基礎基本都是0,所以有些吃力,好在在動手寫**將近20天之後總算做出了一點成績~
由於obj格式雖然基本相同,但是還是有些大同小異的地方,我在參考了glm.c的原始碼和我需要讀取的obj格式之後寫出的**~
這是我的obj檔案的格式,v/vt/vn部分都是一樣的,不懂我在說啥的可以查一下obj格式說明,網上很多:
g 1
usemtl 026
f 6/1/1 5/2/1 7/3/1 8/4/1
usemtl 027
f 4/5/2 3/6/2 5/7/2 6/8/2
usemtl 028
f 3/9/3 2/10/3 7/11/3 5/12/3
usemtl 029
f 2/13/4 1/14/4 8/15/4 7/16/4
usemtl 030
f 1/17/5 4/18/5 6/19/5 8/20/5
我的紋理.mtl檔案格式是這樣的:
newmtl 001
ka 1.000 1.000 1.000
kd 1.000 1.000 1.000
map_kd image\001.png
我們可以根據自己的檔案格式不同原創**,在qt中封裝了很多很好用的物件~
讀取資料模型
建立並繫結紋理
建立面的法向量
將資料歸一化顯示在螢幕中間
繪製三維資料
主要的實現過程是這樣,當然顯示中還需要光照來配合法向量形成三維的效果和陰影!
Qt實現讀取顯示obj檔案 繪製資料
前面的工作做好之後,繪製的 就沒那麼麻煩了,但是要注意紋理座標和麵的節點座標是交替進行的,就是乙個紋理座標,乙個節點座標 否則顯示不出來紋理!成功的圖就不發了,估計是要保密的 渲染模型 void gldraw glmodel model,size t mode if mode gl smooth m...
Qt實現讀取顯示obj檔案 計算面的單位法向量
計算面的法向量是乙個數學過程,相信很多人都已經將這個知識還給老師了!此處應有乙個哭臉 其實主要的原理就是計算兩個向量的點積 dot product 我發誓這個概念真的第一次出現在我人生中 也就是交叉乘積!a a1,a2,a3 b b1,b2,b3 a b a2b3 a3b2,a3b1 a1b3,a1...
Qt實現讀取顯示obj檔案 歸一化座標
歸一化座標的最大用處就是將節點座標轉換在 1 1的範圍內,從而可以顯示在我們的視線範圍內!總體的思路就是找出節點中最大值作為基數,然後平移,縮放!將圖形移到螢幕中間來 float glunitize glmodel model w glmabs maxx glmabs minx h glmabs m...