← SEARCHABLE ARCHIVE
Mathematics · 2026-07-09

World, View, Projection 행렬

3D 정점이 화면의 픽셀이 되는 과정

INTERACTIVE READING MODE →

본 블로그 작성 글들은, 강의를 목표로 하고 제작되었습니다. 또한 작성된 글의 정보도 틀렸을 수 있으니, 주의해주세요.

3D 물체가 화면의 2D 픽셀로 나타나기까지 World, View, Projection 행렬을 거친다.

Local Space
   ↓ World
World Space
   ↓ View
View Space
   ↓ Projection
Clip Space
   ↓ Perspective Divide
NDC
   ↓ Viewport
Screen

World 행렬

모델 파일의 정점을 게임 월드의 위치, 회전, 크기로 옮긴다. 같은 Mesh를 여러 Actor가 사용하더라도 각자 다른 World 행렬을 가진다.

View 행렬

카메라가 월드에 있는 모든 물체를 보는 대신, 월드 전체를 카메라의 반대 방향으로 이동하고 회전한다고 생각할 수 있다.

카메라가 오른쪽으로 10 이동
View에서는 월드를 왼쪽으로 10 이동

View 행렬은 카메라 Transform의 역변환과 관계가 있다.

Projection 행렬

원근 투영은 멀리 있는 물체를 작게 보이게 하고, Near Plane과 Far Plane 사이의 공간을 Clip Space로 바꾼다.

XMMATRIX Projection = XMMatrixPerspectiveFovLH(
    XMConvertToRadians(60.0f),
    Width / static_cast<float>(Height),
    0.1f,
    1000.0f
);

Near 값이 지나치게 작고 Far 값이 너무 크면 Depth Buffer 정밀도가 나빠져 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 인자 순서, Transpose 여부를 하나의 규칙으로 통일해야 한다.