← 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参数顺序和转置状态必须统一为一个规则。