← SEARCHABLE ARCHIVE
Mathematics · 2026-07-06

행렬로 위치, 회전, 크기 변환하기

게임 오브젝트의 Transform을 행렬로 표현하기

INTERACTIVE READING MODE →

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

게임 오브젝트의 위치, 회전, 크기는 행렬로 표현할 수 있다. 2D에서 원점을 기준으로 한 변환부터 확인해보자.

크기 변환

[ sx  0 ] [ x ] = [ sx * x ]
[ 0  sy ] [ y ]   [ sy * y ]

X축은 sx, Y축은 sy만큼 늘어난다. 둘 중 하나가 음수면 해당 축을 기준으로 뒤집힌다.

회전 변환

[ cosθ  -sinθ ] [ x ]
[ sinθ   cosθ ] [ y ]

이 행렬은 원점을 중심으로 벡터를 θ만큼 회전시킨다. Degree를 받는 함수와 Radian을 받는 함수를 섞지 않게 주의해야 한다.

이동은 왜 3×3인가?

2×2 행렬만으로는 원점을 다른 위치로 옮길 수 없다. 그래서 2D 좌표에 w = 1을 추가한 동차 좌표를 사용한다.

[ 1 0 tx ] [ x ]   [ x + tx ]
[ 0 1 ty ] [ y ] = [ y + ty ]
[ 0 0  1 ] [ 1 ]   [   1    ]

3D에서는 같은 이유로 4×4 행렬을 사용한다.

순서가 결과를 바꾼다

물체를 두 배 키운 뒤 오른쪽으로 10 이동하는 것과, 먼저 이동한 뒤 전체 좌표를 두 배로 키우는 것은 결과가 다르다.

Scale → Translate
위치는 10만큼 이동

Translate → Scale
이동량까지 2배가 될 수 있음

엔진과 수학 라이브러리마다 벡터를 행으로 두는지 열로 두는지 다르므로 코드의 곱셈 순서를 문서로 확인해야 한다. 행렬 자체보다 어떤 좌표계에서 어떤 순서로 적용하는지가 더 중요하다.