2013-03-11 86 views
2

我開始閱讀lesson 1 in learningwebgl blog,我注意到這部分:透視矩陣如何工作?

var pMatrix = mat4.create(); 
mat4.perspective(45, gl.viewportWidth/gl.viewportHeight, 0.1, 100.0, pMatrix); 

我大致瞭解如何矩陣(平移/旋轉/多)的作品,但我不知道mat4.perspective(...)手段。它是幹什麼用的?如果我用這個矩陣乘以一個向量,結果是什麼?

回答

5

透視矩陣用於縮放,並可能翻譯或翻轉座標系以準備透視分割。由於透視投影操作涉及分割,因此不能僅由線性矩陣變換來表示。

在可編程圖形流水線(請​​參閱pixel shaders)中,您看不到分割操作 - 它仍然是固定功能部件之一。程序員通過調整操作中涉及的變量來控制它。在角度劃分的情況下,它是投影矩陣,可以給你這種控制。

+0

謝謝,但是接下來如何將1×1×1立方體內的座標從透視金字塔內轉換爲'(x',y',z')'座標? – defunct 2013-03-11 15:27:50

+0

聽起來像你自從發佈原始問題以來已經做了一些閱讀。如果您想要正確的答案,請打開另一個問題,評論中沒有足夠的空間。 – 2013-03-11 15:38:15

-1

投影矩陣用於將世界座標轉換爲屏幕座標。

三維虛擬世界中的位置是x,y和z座標的三元組。當你想繪製一些東西(或者告訴OpenGL繪製東西)時,需要計算這些座標在用戶屏幕上的位置。

該計算是通過矩陣乘法實現的。

由x,y和z組成的向量(以及允許矩陣執行縮放操作所必需的第四個值1)與矩陣相乘,以接收一組新的x,y和z座標(第4個值被丟棄),它表示該點在用戶屏幕上的位置(需要使用z座標來確定哪些對象位於其他對象的前面)。

函數mat4.perspective生成一個投影矩陣,該矩陣生成一個完全相同的矩陣。這些參數是:

  • 的場的視在程度(45)
  • 視場(視口的寬高比)
  • 來自收視者的最小距離的縱橫比,其還在繪製(0.1世界單位)
  • 從觀察者這仍然是拉伸的最大距離(100.0世界單位)
  • 其中所生成的矩陣被存儲在陣列(pMatrix)

當一個點與該矩陣相乘時,結果是該點必須繪製的屏幕座標。

+1

請問這個問題的人請解釋我的回答有問題嗎? – Philipp 2013-03-11 13:57:23

+2

我沒有降低它的效果,但是你描述齊次座標是如何工作的並不是很好。 – andrewmu 2013-03-11 14:04:48

+3

這個答案是錯誤的。首先,投影矩陣實際上並沒有做投影 - 它不會產生「屏幕座標」,並且「第4個值」不會被「丟棄」(好吧,那是三件事......) – JasonD 2013-03-11 14:05:51