如果將OpenGL的MVP矩陣設定為單位陣

2021-05-11 16:59:20 字數 1090 閱讀 6310

如果將opengl的mvp矩陣設定為單位陣,會發生什麼?

opengl的幾個座標空間: object space-> eye space-> clip space -> ndc -> wc

那麼,mvp矩陣即model-view-projection matrix是將object sapce的vertex直接變換到clip space

即 (x,y,z) -> (xc, yc, zc, wc)  如果點在視錐體內則滿足-wc<=xc<=wc; -wc<=yc<=wc; -wc<=zc<=wc;

所以如果mvp matrix是identity matrix,對於object space中的頂點(x,y,z) (其實是(x,y,z,1)因為opengl中w預設為1.0),進行變換:

(x,y,z,1)*i = (x,y,z,1) 注意:為了書寫方便這兒使用行向量了,如我們所知opengl是這樣變換點的p'=mp

也就是說mvp為單位陣的情況下,在object space用(x,y,z)表達的乙個vertex就是在clip space中用(xc,yc,zc,wc)表達的乙個vertex,且wc=1

那麼這有什麼用?最常見的用法是畫乙個全屏的矩形。想象一下,你在乙個x,y,z座標都是[-1,1]的空間中,x,y平面對應著螢幕,z軸是深度,z=-1的點在near clip plane上,z=1的點在far clip plane上,所以這樣指定4個點,畫出的矩形將覆蓋螢幕,且z值離camera最近:

glvertex3i (-1, -1, -1);

glvertex3i (1, -1, -1);

glvertex3i (1, 1, -1);

glvertex3i (-1, 1, -1);

需要區別的是,這個時候的z還沒有經過depth range的對映(那是在view port變換中進行的),且這兒z在[-1,1]間是因為w=1,不要混淆。

此時,可以通過buffer的mask做一些操作,比如先關閉color buffer,只更新depth buffer,然後畫全屏矩形,通過設定合適的z值進行深度測試(一般要關閉z write)就可以mask出一些複雜的圖形了

opengl的轉換矩陣

矩陣真的是乙個很神奇的數學工具,雖然單純從數學上看,它並沒有什麼特別的意義,但一旦用到空間中的座標變換,它就 一遇風雲便成龍 大顯神威了。簡單的工具實現了複雜的功能,便預示著要理解它我們還是要花上點功夫的。下面就簡單介紹一下opengl中的轉換矩陣。1 轉換矩陣的原理 opengl中的轉換矩陣是這樣...

opengl的矩陣理解

矩陣真的是乙個很神奇的數學工具,雖然單純從數學上看,它並沒有什麼特別的意義,但一旦用到空間中的座標變換,它就 一遇風雲便成龍 大顯神威了。簡單的工具實現了複雜的功能,便預示著要理解它我們還是要花上點功夫的。下面就簡單介紹一下opengl中的轉換矩陣。1 轉換矩陣的原理 opengl中的轉換矩陣是這樣...

opengl矩陣堆疊的常識

1,實際上在opengl中對於乙個已經存在的矩陣 m 此時在畫點 c 旋轉 r 都是 mc 或者 mr在glmultmatrixf t 中也是已經存在的矩陣 m t 2 在opengl中有時需要獲取乙個矩陣內容而返回的是乙個指標,但是這個指標指向的記憶體轉為二維陣列時,與c或者c 中一維陣列轉二維陣...