앞선 여러 포스트들(https://gamesmith.tistory.com/133?category=1032694, https://gamesmith.tistory.com/143?category=1032694)에서 우리는 선형변환이란 결국 어떤 벡터를 다른 좌표계로 이동시키는 것에 불과하다는 것을 배웠다. 이는 3D 환경에서도 마찬가지이다.
우리가 앞서 배운 T, R, S 모두 결국 선형사상이고, 때문에 TRS 행렬들의 곱인 Transform matrix(TRS Matrix) 또한 하나의 이동, 회전, 확대를 합쳐놓은 하나의 선형사상이다.
때문에 이는 하나의 좌표계에서 다른 좌표계로 점(벡터)을 이동시키는 것으로 표현이 가능하다.
반대로 (TRS)^-1을 곱해주는 것으로 해당 좌표계에서 다시 원래 좌표계로 점을 가져오는 것 또한 가능하다.
사실 이 내용들은 이미 다뤄왔던 내용인데, 굳이 이렇게 별도의 포스트로 작성하는 이유는 이 성질이 여러 3D 연산에서 중요하게 사용되고, 또 2D와는 본질적으로 같은 것임에도 사뭇 느낌이 다르기 때문이다.
어떤 코끼리가 있고, 그 코끼리의 머리 위에 벼룩이 있으며 이 벼룩의 위치와 벼룩이 바라보고 있는 방향을 벼룩의 위치에 대하여 나타내고 있는 벡터 x가 있다고 하자. 즉 벼룩이 우측을 바라보고 있다면 이는 x = (1,0,0)으로 나타낼 수 있다고 하자.
이때, 코끼리의 월드 내에서의 위치(global coordinate)가 주어졌을 때, 벼룩의 위치와 바라보는 방향을 이 월드 내에서의 벡터로 변환하려면 어떻게 해야 할까?
결과부터 이야기하면, 벼룩이 바라보는 방향의 글로벌한 벡터 g는
g = E*H*F*x
로 표현할 수 있다.
반대로 글로벌한 벼룩의 바라보는 방향을 벼룩의 로컬 좌표계에 대해 표현하려면
x = F^-1 * H^-1 * E^-1 * g
로 표현 가능하다.
월드 좌표계의 원점 (0,0,0)에서 코끼리의 현재 위치까지의 이동을 나타낸 행렬(=transpose matrix)을 E라고 하자.
E라는 이동을 한 이후 H라는 이동을 해주는 것으로 코끼리의 머리의 글로벌한 위치를 나타낼 수 있다고 하자.
E, H라는 이동 이후 F라는 이동을 해주는 것으로 이번엔 코끼리의 머리에서 벼룩의 위치까지 이동할 수 있다고 하자.
최종적으로 우리는 월드 좌표계 원점에서 벼룩의 위치까지의 이동을 EHF를 곱해주는 것으로 표현할 수 있다.
이걸 원점을 벼룩의 위치까지 이동시켰다, 즉 벼룩의 위치를 원점으로 만들었다고 이해하면 쓰기 편하다.
'mathematics > game mathematics' 카테고리의 다른 글
[Mathematics] 27. 기준점을 중심으로 한 원형 회전 (0) | 2022.08.07 |
---|---|
[Mathematics] 26. Camera view transformation matrix (0) | 2022.06.23 |
[Mathematics] 24. Fast TR Matrix Inversion (0) | 2022.06.23 |
[Mathematics] 23. Eigenvectors, Eigenvalues (0) | 2022.06.06 |
[Mathematics] 22. Euler angle vs Matrix vs Quaternion (0) | 2022.05.28 |