透視投影矩陣

2022-07-09 04:06:14 字數 1364 閱讀 3319

1. 將投影面上x,y,z方向上的點,投影到剪裁空間有一定比例關係

2. y方向上的比例關係

y/y0 = y'

y0/-z = tan(fov/2)

y' = y / tan(fov/2)*-z

讓f=1/tan(fov/2)

y' = f/-z * y

3. x方向上的比例關係

x' = f'/-z * x

根據相似三角形原理:

tan(fovx/2)/tan(fovy/2)=f/f' = aspect = width/height

所以:x' = f/aspect * 1/-z * x

4. 為了讓z方向近大遠小表示更真實,用雙曲線來求z方向上的點

因為zfar = 1 znear = -1

1 = m/zfar + c

-1 = m/znear + c

解方程得到:

m = -(2 * zfar * znear / znear - zfar)

c = -(zfar + znear/znear-zfar)

令znear = n, zfar = f

z' = 2nf/n-f * 1/-z - n+f/n-f

5. 將x',y',z'寫成矩陣的形式

x' = f/aspect * 1/-z * x

y' = f/-z * y

z' = 2nf/n-f * 1/-z - n+f/n-f

f = 1/tan(fov/2)

讓圖形引擎去除以1/-z,所以消去1/-z

x'' = x'/-z

y'' = y'/-z

z'' = z'/-z

x'' = f/aspect * x

y'' = fy

z'' = 2nf/n-f + n+f/n-f *

a = [

f/aspect 0 0 0

0 f 0 0

0 0 n+f/n-f 2nf/n-f

0 0 -1 0

]b = [

x y

z 1

]將w分量設定為-z,圖形引擎計算的時候會將x,y,z各分量除以-z

a * b =

[ fx/aspect

fy n+f/n-f + 2nf/n-f

-z]

const m4 = ,

透視投影矩陣的構建

投影矩陣最終建立的是乙個平截頭體 也可以稱為臺 在這種變換下呈現遠小近大的效果。這裡我將我學到知識記錄下來,以後備忘用。首先是使用opengl的glfrustum函式,它要求傳入的是前後 左右 上下等引數,這要求這個平截頭體是軸對稱的。由它構成的矩陣是為 如果我們使用的不是glfrustum,而是g...

26 WebGL的透視投影矩陣

上一章講的盒狀投影矩陣,主要用於精度需求度高的工業。而這一節的透視投影矩陣,更符合我們正常人的視覺,也是就近大遠小的感覺。我們需要實現的效果就是同樣大小的圖形,距離視點越遠,展現出來就越小,如圖 就像盒狀可視空間那樣,透視投影可視空間也有視點 視線 近裁剪面和遠裁剪面,這樣可視空間內的物體才會被現實...

Android OpenGL透視投影

首先申明下,本文為筆者學習 opengl es應用開發實踐指南 的筆記,並加入筆者自己的理解和歸納總結。1 透視除法 opengl會把每個gl position的x y和z分量都除以它的w分量。當w分量用來表示距離的時候,會使得較遠處的物體被移動到距離渲染區域中心更近的地方。新增w分量建立三維圖 p...