DirectX/[Inflearn_rookiss] Part2: DirectX12

10. 좌표계 변환 행렬

헛둘이 2023. 1. 22. 13:51

우리가 x, y라고 하는 것은 사실

해당 좌표계(A 좌표계)의 기저 벡터 u1, v2에 각각 x성분, y 성분을 곱한 것이다.

 

즉, (x, y) = (x * u1) + (y * v1)이라고 볼 수 있다.

*기저 벡터 u1, v1은 그 좌표계의 x방향, y방향을 가리키는 단위 벡터를 의미한다.

 

그런데 여기서 좌표계 B의 등장?

좌표계는 자기 자신만의 x방향, y방향에 대한 기저 벡터를 가지고 있을 것이다. (u2, v2)

 

좌표계 변환을 하는 이유?

카메라 좌표의 경우 현재 좌표에서 카메라의 위치에 대해 좌표계를 변환해야 한다.

이 경우 물체 O는 A 좌표(현재 좌표)기준에서 B 좌표(카메라 좌표)기준으로 변환해야 한다.

 

 

 

 

여기서 AM = AB + BM이 되고

AM은 아래와 같이 성분을 분리할 수 있다.

 

 

그럼 AM = AB + BM에서 BM에 대한 식으로 고치면

BM = AM - AB가 되며, BM = AM + BA가 된다.

 

BA는 B 좌표계의 원점에서 A 좌표계의 원점을 향하는 벡터이므로,

BA 벡터의 x 성분과  y 성분을 B 좌표계 기준으로 Qx, Qy와 같이 정의한다면

 

- 다음과 같은 식이 만들어 진다.

- 이 식을 행렬로 옮기면

 

3차원 요소 w가 추가된 모습

 

이렇게 좌표계 변환을 구현할 수 있다.

Qx, Qy, Qz 성분은 원점으로부터의 거리정보가 저장되는데,

방향 벡터의 경우 이 거리정보가 필요가 없으므로, 변환할 때 w 요소를 0으로 만들어서 변환하면 위치 정보가 날아가게 된다.

 

 위치 정보가 필요하다면 w는 1, 필요 없다면 0