Post

4.3 3D 선형변환

도입

3D 게임에서 캐릭터가 머리를 돌리거나, 애니메이션 영화에서 로봇 팔이 관절을 꺾는 장면을 생각해보자. 드론이 공중에서 기울어지고, 우주선이 세 방향으로 자세를 바꾸는 것 — 이 모든 동작은 3D 선형변환으로 표현된다.

3D 공간에서는 회전축이 세 개(x, y, z)이기 때문에 변환이 훨씬 풍부해진다. 그리고 이동(Translation)을 선형변환으로 처리하려면 동차좌표계라는 도구가 필요하다. 이번 글에서 3D 변환의 세계를 탐험해보자.


x축 회전

x축을 고정하고 yz 평면 위에서 $\theta$만큼 반시계 회전하는 변환:

\[R_x(\theta) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{pmatrix}\]

x 좌표는 변하지 않고, y와 z 좌표가 2D 회전처럼 섞인다. 항공 용어로는 롤(Roll) — 비행기 날개를 기울이는 동작이다.


y축 회전

y축을 고정하고 xz 평면 위에서 $\theta$만큼 회전하는 변환:

\[R_y(\theta) = \begin{pmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{pmatrix}\]

부호에 주의: $R_x$, $R_z$와 달리 $\sin\theta$의 위치가 다르다. 이는 오른손 좌표계에서 y축의 방향 때문이다. 항공 용어로는 피치(Pitch) — 비행기 기수를 올리거나 내리는 동작이다.


z축 회전

z축을 고정하고 xy 평면 위에서 $\theta$만큼 반시계 회전하는 변환:

\[R_z(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix}\]

xy 블록이 2D 회전 행렬과 동일하다. z 좌표는 변하지 않는다. 항공 용어로는 요(Yaw) — 비행기가 좌우로 방향을 바꾸는 동작이다.

3D 회전 행렬 시각화


3D 크기 조정 (Scaling)

세 축 방향으로 각각 $s_x$, $s_y$, $s_z$배 확대/축소:

\[S = \begin{pmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & s_z \end{pmatrix} = \text{diag}(s_x,\, s_y,\, s_z)\]
부피 변화율은 $\det(S)=s_x \cdot s_y \cdot s_z$이다.

3D 크기 조정 행렬 시각화


세 회전 비교

회전축행렬 크기고정 좌표항공 명칭
x축 $R_x(\theta)$$3\times3$x 불변Roll
y축 $R_y(\theta)$$3\times3$y 불변Pitch
z축 $R_z(\theta)$$3\times3$z 불변Yaw

세 회전 행렬 모두 $\det = 1$이고 $R^{-1} = R^\top$이다 (직교 행렬).


동차좌표계 (Homogeneous Coordinates)

선형변환 $T(\vec{x}) = A\vec{x}$는 원점을 고정한다. 따라서 이동(Translation) $\vec{x} \mapsto \vec{x} + \vec{t}$는 선형변환이 아니다.

이 문제를 해결하기 위해 동차좌표계를 사용한다. 3D 점 $(x, y, z)$를 4D 벡터로 확장한다:

\[\begin{pmatrix} x \\ y \\ z \end{pmatrix} \longrightarrow \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix}\]

이동 변환을 $4 \times 4$ 행렬로 표현하면:

\[T_{\vec{t}} = \begin{pmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{pmatrix}\]

이제 회전, 크기 조정, 이동을 모두 $4 \times 4$ 행렬의 곱으로 통일할 수 있다. 컴퓨터 그래픽스(OpenGL, DirectX)에서 표준으로 사용하는 방식이다.


핵심 포인트 정리

개념설명/공식
x축 회전$R_x(\theta)$: yz 평면 회전, Roll
y축 회전$R_y(\theta)$: xz 평면 회전, Pitch (부호 주의)
z축 회전$R_z(\theta)$: xy 평면 회전, Yaw
3D 크기 조정$\text{diag}(s_x, s_y, s_z)$, 부피 변화 $= |s_xs_ys_z|$
직교 행렬회전 행렬은 $R^{-1} = R^\top$, $\det = 1$
동차좌표계3D 점을 4D로 확장, 이동을 행렬 곱으로 표현
4×4 이동 행렬마지막 열에 이동 벡터 $\vec{t}$를 배치

다음 글에서는 변환의 합성 — 두 변환을 연달아 적용할 때 순서가 왜 중요한지를 알아본다.

This post is licensed under CC BY 4.0 by the author.