2012-12-27 34 views

回答

1

投影矩陣表示以下等式:

xx xy xz xt <- x' = (xx*x + xy*y + xz*z + xt)/(wx*x + wy*y + wz*z + 1) 
yx yy yz yt  y' = (yx*x + yy*y + yz*z + yt)/(wx*x + wy*y + wz*z + 1) 
zx zy zz zt  z' = (zx*x + zy*y + zz*z + zt)/(wx*x + wy*y + wz*z + 1) 
wx wy wz 1 

從所有的其它元素將是零,但

screen_x = x-z*0.5 : xx=1,  xz=-0.5 
screen_y = y-z*0.5 :  yy=1, xz=-0.5 
depth z'= z  :    zz=1  (and ww=1) 

EDIT這不是一般的投影矩陣,但只適用於這個特定的問題。

一般[對稱]投影矩陣是從中可以得出x和y將由WX * Z ==ž被劃分形式

a 0 0 d 
0 b 0 e 
0 0 c f 
0 0 1 0, 

的。

+0

謝謝(這就是我一直在嘗試,但我只是想我使用錯誤的渲染器,它沒有實現z緩衝區)。不過,我很高興能真正理解發生了什麼。什麼是wx wy和wz值的解釋?另外,我想你錯了:最後一個元素(「1」)實際上適用於縮放整個結果,正如我通過實驗發現的那樣。 – MaiaVictor

+0

單獨沒有對wx,wy,wz值的解釋,但是row0 + -row3表示左/右剪切平面的平面方程。 row1 + -row3:=頂部/底部平面方程和row2 + -row3方程是視錐體近/遠剪切平面的方程。作爲一個整體(x y z 1)* persp_Matrix將查看視錐體(剪切金字塔)轉換爲_unit cube_。相反,單個矢量矩陣乘法會告訴某個點是否在視圖之外或之內。 –

+1

可以通過修改ww-term來縮放 - 但只有當xt,yt,zt矢量爲零時纔可以縮放。普遍正確的方法是乘以ViewMatrix的上3x3向量,然後將結果乘以(相當稀疏)的投影矩陣。 (一旦倍增,我認爲縮放「分散」在VP-矩陣周圍,並且它不能僅位於左上角,我假設) –