2012-03-10 178 views
0

我試圖理解投影矩陣背後的數學,我發現this page。從該頁面的矩陣:投影矩陣

Matrix

我發現這個矩陣類似於XNA的矩陣。

我明白他們是如何得到矩陣的m33和m44列,但他們如何得到m11和m22?而且我不明白爲什麼我必須給出寬高比,如果我已經給出了視角的話。

我想知道的最後一件事是:從ndc空間轉換到窗口空間的方程是什麼,以及它們如何達到這個方程?

+0

投影矩陣圖片的鏈接是這樣的:http://medialab.di.unipi.it/web/IUM/Waterloo/img284.gif – 2012-03-10 13:13:54

+0

這個答案可能有幫助嗎? http://stackoverflow.com/questions/28286057/trying-to-understand-the-math-behind-the-perspective-matrix-in-webgl/28301213#28301213 – gman 2015-06-25 09:26:41

回答

0

如果屏幕是圓形的,FOV就足夠了......但它們是矩形的,所以只有FOV是不夠的。 FOV設置爲屏幕高度,另一個是FOV乘以屏幕寬度與高度的比率。

m11雖然可以用來縮放寬度方向上的FOV。可以認爲m22是在高度方向上縮放FOV的一種方式。

+0

感謝您的快速反應,但規模窗口擬合是當你轉移到窗口空間並用這個方程乘以每個x,y時完成的:'xwin =(xndc + 1)* width * 0.5 + x ywin =(yndc + 1)* height * 0.5 + y' – 2012-03-10 18:13:38

+0

no,該代碼看起來像是根據屏幕尺寸將位置分量(-1到+1空間,WVP輸出WVP考慮後)轉換爲屏幕位置,並提供平移移位以將原點參考放置在左上角。這與X和Y方向上的FOV差異無關。通常,您剛剛展示的calc在頂點着色器和像素着色器之間的GPU管道中爲您完成,因爲您的圖形設備知道您的視口尺寸。你是否手動確定3D位置的2D屏幕位置? – 2012-03-11 00:34:09

+0

不,我只是想了解「投影矩陣」是如何工作的,當我們理解某些東西時,更容易與之合作。我的問題是爲什麼我需要縮放x,如果它已經完成,當我們轉換到屏幕位置 – 2012-03-11 16:53:31

0

您可以通過縮放得到的x和y座標來改變視野:您可以縮放它們,獲得更小的視野(放大),然後縮小它們,您將獲得更大的視野查看(縮小)。 3D軟件中使用的透視投影是直線的,所以如果你的視野足夠大,邊緣的變形將變得很嚴重,而且視場不能超過180°。

因爲OpenGL和Direct3D中的剪輯座標從-1運行到1,所以需要縱橫比。在水平方向上-1是左側,1是右側。垂直方向-1是底部,1是頂部。所以,如果你想讓你的方塊真的出現一個正方形,你需要用縱橫比縮小X座標。