Qt實現讀取顯示obj檔案 說明

2021-07-28 16:50:10 字數 835 閱讀 4077

年後回來乙個多月基本上都在研究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...