[3D] 회전 행렬의 의미

1602 단어 WebGL3D
회전 행렬은 이런 느낌의 행렬입니다.
3D를 하고 있는 사람이라면 잘 보는 녀석이군요.
\begin{equation}
\begin{vmatrix}
X' \\
Y' \\
Z' \\
W'
\end{vmatrix}
=
\begin{vmatrix}
\cos\theta z &-\sin\theta z &0 &0 \\
\sin\theta z &\cos\theta z &0 &0 \\
0 &0 &1 &0 \\
0 &0 &0 &1
\end{vmatrix}
\times
\begin{vmatrix}
X \\
Y \\
Z \\
1
\end{vmatrix}
\end{equation}

그렇다면 왜 이런 행렬이 되는가?
그 대답이 이 그림입니다↓

이 그림은 그림에서 배우는 게임 3D 수학 에서 소개되고 있는 것으로부터 인용했습니다.

$p$ 와 $q$ 의 값이 어떻게 변화하고 있는지 주목해 주세요.
회전 행렬로 나오는 값이 있네요.

$p$ 는 X축의 점을 나타내고, $q$ 는 Y축의 점을 나타내고 있습니다.
X축의 점 $[1, 0]$ 를 $θ$ 만큼 회전하면 그 좌표는 $[cos θ, sin θ]$ 가 되는 것을 알 수 있다고 생각합니다.

그리고 문제는 Y축.
Y축의 경우는 조금 발상을 전환하고, Y축을 X축으로 두고 생각하면 알 수 있습니다.
즉, Y축 「로부터」$θ$ 만큼 회전한 위치의 좌표를 구하면 되는 것입니다.

다만, 생각을 전환한 것만으로 좌표 공간은 변하지 않으므로, 결과적으로 $[0, 1]$ 의 점을 이동하는 경우, X축 마이너스 방향으로 이동하게 되므로, 최종적으로 $[-sin θ, cos θ]$ 이동하면 목적의 좌표가 구해진다는 것입니다.

결국, X, Y 모두 이러한 값을 곱해 주면 원하는 회전을 얻을 수 있다는 것입니다.

쉐이더를 쓰고 있으면, 이 회전 행렬과 비슷한 처리를 하고 싶은 경우가 있거나 합니다.
그 때는 이것을 기억해, 적절하게 코드를 써 주면 일부러 행렬을 만들지 않아도 원하는 회전을 얻을 수 있습니다.

(라고 할까, 바로 그것이 있고 비망록으로 쓴 것은 비밀입니다 w)

좋은 웹페이지 즐겨찾기