← SEARCHABLE ARCHIVE
Mathematics · 2026-07-09

世界、視圖、投影矩陣

3D 頂點變成螢幕上像素的過程

INTERACTIVE READING MODE →

該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。

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參數順序和轉置狀態必須統一為一個規則。