2009-08-16 161 views
4

在HLSL中有很多矩陣乘法,雖然我理解如何以及在何處使用它們,但我不確定它們是如何派生的或它們的實際目標是什麼。矩陣乘法 - 視圖/投影,世界/投影等

所以我想知道是否有網上的資源解釋了這一點,我特別好奇背景矩陣和世界+視圖矩陣乘以投影矩陣背後的目的是什麼。

回答

12

從數學的角度來看,您可以從this wikipedia articlemsdn獲得一些信息。從本質上講,當您將三維模型渲染到屏幕上時,您將從分散在三維空間中的頂點的簡單集合開始。這些頂點都有自己的位置,用「對象空間」表示。也就是說,它們通常具有在正在渲染的場景中沒有意義的座標,但僅表示同一模型的一個頂點和另一個頂點之間的關係。例如,模型頂點的位置只能在-1到1之間(或類似,取決於模型是如何創建的)。

爲了將模型渲染到正確的位置,您必須縮放,旋轉並將其轉換爲場景中的「真實」位置。您要移動的位置用「世界空間」座標表示,該座標也表示場景中頂點之間的真實關係。爲此,只需將每個頂點的位置與它的矩陣相乘即可​​。必須創建此矩陣以包含您需要應用的平移/旋轉/縮放參數,以使對象出現在場景中的正確位置。在這一點上(在將所有模型的所有頂點與世界矩陣相乘之後),頂點以世界座標表示,但仍然無法正確呈現它們,因爲它們的位置相對於「視圖」而言不是而是(即你的相機)。所以,這次你用一個View矩陣乘以所有的東西,這個矩陣反映了你渲染場景的視點的位置和方向。

所有的頂點現在都處於正確的位置,但爲了模擬perspective,您仍然必須將所有內容與Projection矩陣相乘。最後的乘法決定頂點的位置如何根據距相機的距離而改變。

現在終於所有頂點從「對象空間」中的位置開始,移動到屏幕上的最終位置,在那裏它們將被渲染,柵格化並呈現。