1. 좌표계 변환의 기본 개념
좌표 이 A 좌표계에서 라는 위치를 가질 때, 이를 B 좌표계를 기준으로 하면 가 됩니다. 이 때, B 좌표계에서의 를 계산하기 위해 필요한 행렬이 좌표계 변환 행렬입니다.
로컬->월드->카메라->투영->스크린 좌표로 좌표계를 변환해야 하는데
이걸 하려면 좌표 변환을 어떻게 해야 하는지 알아야 한다.
2. 좌표계 변환 행렬 공식 도출 과정
판서를 곱씹어 보고 이해를 해보자. A를 기준으로 한 좌표는 x,y이다. 단위 벡터는 U1, V1 이다. AM은 A좌표를 기준으로 하면 AM = x1U1+y1V1이다. B좌표를 기준으로 한 BM은 BM=x2U2+y2V2이다. AM을 U2, V2로 표현을 한 후, BM을 구하기 위해 AM를 빼주는 효과랑 같게 BA를 더해주고, U2, V2로 묶어주면, U2, V2를 단위 벡터로 했을 때 BM의 거리가 나온다. U2, V2가 새로운 좌표계의 단위 벡터인데 이것에 곱해 주는 값이 곧 새로운 좌표계 B를 기준으로 한 M의 좌표가 된다. 이를 행렬로 바꾼 것이 변환 공식이다. x,y,z,1에 곱하면 U2, V2로 묶었을 때의 괄호안의 값 즉, B를 기준으로 했을 때 좌표가 나오기 때문이다.
단위 벡터 u, v
기준이 변하는게 좌표계 변환이다.
A를 기준으로 할 때 (x, y)였던 M의 좌표가 B를 기준으로 하면 어떻게 변할까?
B를 기준으로 좌표 M이 (X,Y)라면 X, Y가 얼마인지 알고 싶다.
좌표계의 변환으로 기준이 바뀌게 되면, 새로운 기준으로 좌표 연산을 해주면 된다.
수학식을 세워서 X,Y를 구할 수 있다.
위에서 구한 식을 행렬로 만들어 보면 다음과 같이 나온다.
A좌표계에서 B좌표계로 넘어 가서, 단위벡터가 벡터 u, v에서 벡터 U, V가 된다면, 변환 행렬은 위와 같이 된다.
A를 기준으로 M의 좌표가 x,y인데, B를 기준으로 했을 때 좌표를 구하는 행렬을 구하는게 목표다.
즉, BM이란 벡터를 구하는게 목표다.
AM을 알고 있으니까, 그 성분인 벡터 u, v를 B를 기준으로 했을 때 단위 벡터인 U, V를 이용해 표현한다.
BM은 AM+BA라는 특징이 있으니 식을 다시 정리해서 보니 위의 행렬이 나오는 것이다.
3. 좌표계 변환 행렬의 구성
완성된 행렬을 보고 성분들을 뜯어 볼 수 있다.
행렬의 상단 세 줄은 단위 벡터 u, v, w의 성분들을 각각 새로운 B좌표계 기준의 성분들로 표현한 것이다.
첫 줄은 B좌표계를 기준으로 한 A좌표축의 단위 벡터 right,
두째 줄은 B좌표계를 기준으로 한 A좌표축의 단위 벡터 up,
세째 줄은 B좌표계를 기준으로 한 A좌표축의 단위 벡터 look을 의미한다.
넷째 줄은 B좌표계를 기준으로 A의 좌표의 위치를 나타낸다.
4. [x y z 1]일 때와 [x y z 0]일 때의 차이
1) - 방향 벡터 (Direction Vector):
방향 벡터를 다룰 때는 xyz0이렇게 0으로 세팅을 해준다.
[ x y z 0 ] 으로 하면 Qx Qy Qz가 날아간다. 이동이 무시가 된다.
(1,1)이 B기준으로 되면 어떻게 되나 퀴즈를 냈을 때, B의 기준으로 있던게 A에 포개져서 좌표의 방향만 바뀐 것처럼 인지가 가능해진다.
BA가 사라지기 때문에 위치 개념이 없고, 방향만 남기고 싶을 때 이걸로 연산을 한다.
2) - 위치 벡터 (Position Vector)
위치 기반으로 할 때는 [ x y z 1 ] 로 연산을 한다.
1을 넣는다는 건 위치를 표현한다.
변환 행렬을 적용할 때 이동, 회전, 스케일링이 모두 적용된다.
5. 변환 방법
AM(A기준 좌표)을 아는데 BM(B기준 좌표)을 구해야 한다. 그럴 때 만능 공식을 이용한다.
이 만능 공식을 구할 수 있다면, 좌표계 변환 행렬이 된다..
객체 또는 점의 좌표를 A 좌표계에서 B 좌표계로 변환하기 위해서는 A 좌표계의 좌표에 해당 변환 행렬을 곱해준다. 이렇게 함으로써 B 좌표계에서의 새로운 좌표를 얻을 수 있다.
A 기준으로 한 좌표 x 행렬 = B를 기준으로 한 좌표
6. 그래픽스에서의 응용
이러한 변환은 3D 그래픽스에서 매우 중요하다. 예를 들어, 객체의 월드 행렬을 알고 있을 경우, 플레이어의 앞 방향은 월드 행렬의 세 번째 줄에서 얻을 수 있다. 또한, 로컬 좌표계에서 월드 좌표계로 변환할 때는 행렬의 네 번째 줄을 참고하여 객체가 어디에 배치되어 있는지 알 수 있다.
7. 만능 공식 행렬의 성분을 채울 때 질문들
행렬의 성분을 구하는게 쉬울까? 못 구하면 의미가 없다.
Qx Qy Qz는 B좌표계를 기준으로 했을 때 A의 좌표는 무엇입니까? 라는 것에 대해 답을 안다면 채울 수 있다.
행렬의 상단 세 줄은 A좌표계의 단위 벡터 u, v, w의 성분들 각각을 B좌표계를 기준으로 표현을 할 수 있다면 채울 수 있다.
'DirectX' 카테고리의 다른 글
13. View 변환 행렬 (0) | 2023.12.21 |
---|---|
12. World 변환 행렬 (0) | 2023.12.20 |
10. SRT 변환 행렬 (0) | 2023.12.18 |
9. 행렬기초 (0) | 2023.12.18 |
8. 행렬 OT (0) | 2023.12.17 |
댓글