世界、視圖、投影矩陣
3D 頂點變成螢幕上像素的過程
該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。
3D 物件會經歷世界矩陣、視圖矩陣和投影矩陣,直到它在螢幕上顯示為 2D 像素。
Local Space
↓ World
World Space
↓ View
View Space
↓ Projection
Clip Space
↓ Perspective Divide
NDC
↓ Viewport
Screen
世界矩陣
將模型檔案的頂點移動到遊戲世界的位置、旋轉和大小。 即使多個Actor使用相同的Mesh,每個Actor也有不同的世界矩陣。
查看矩陣
您可以將整個世界視為沿著與相機相反的方向移動和旋轉,而不是讓相機看到世界上的每個物體。
相機向右移動 10
在視圖中,將世界向左移動 10
View矩陣與相機Transform的逆變換有關。
投影矩陣
透視投影使遠處的物體看起來更小,並將近平面和遠平面之間的空間變成剪輯空間。
XMMATRIX Projection = XMMatrixPerspectiveFovLH(
XMConvertToRadians(60.0f),
Width / static_cast<float>(Height),
0.1f,
1000.0f
);
如果「Near」值太小而「Far」值太大,則深度緩衝精度可能會下降,並且可能會出現 Z-Fighting。
結合在Shader中
float4 WorldPosition = mul(float4(Input.Position, 1.0f), World);
float4 ViewPosition = mul(WorldPosition, View);
Output.Position = mul(ViewPosition, Projection);
矩陣順序可能會根據所使用的約定而變化。 DirectXMath 和 HLSL 中的記憶體佈局,mul參數順序和轉置狀態必須統一為一個規則。