1
如何在Three.js上製作一個投影矩陣,它可以完成下面的規則描述的從3d點到屏幕座標的映射?如何在Three.js上設置投影矩陣來進行這種映射?
screen_x = x - z*0.5
screen_y = y - z*0.5
depth = z
如何在Three.js上製作一個投影矩陣,它可以完成下面的規則描述的從3d點到屏幕座標的映射?如何在Three.js上設置投影矩陣來進行這種映射?
screen_x = x - z*0.5
screen_y = y - z*0.5
depth = z
投影矩陣表示以下等式:
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,
的。
謝謝(這就是我一直在嘗試,但我只是想我使用錯誤的渲染器,它沒有實現z緩衝區)。不過,我很高興能真正理解發生了什麼。什麼是wx wy和wz值的解釋?另外,我想你錯了:最後一個元素(「1」)實際上適用於縮放整個結果,正如我通過實驗發現的那樣。 – MaiaVictor
單獨沒有對wx,wy,wz值的解釋,但是row0 + -row3表示左/右剪切平面的平面方程。 row1 + -row3:=頂部/底部平面方程和row2 + -row3方程是視錐體近/遠剪切平面的方程。作爲一個整體(x y z 1)* persp_Matrix將查看視錐體(剪切金字塔)轉換爲_unit cube_。相反,單個矢量矩陣乘法會告訴某個點是否在視圖之外或之內。 –
可以通過修改ww-term來縮放 - 但只有當xt,yt,zt矢量爲零時纔可以縮放。普遍正確的方法是乘以ViewMatrix的上3x3向量,然後將結果乘以(相當稀疏)的投影矩陣。 (一旦倍增,我認爲縮放「分散」在VP-矩陣周圍,並且它不能僅位於左上角,我假設) –