게임에서 플레이어의 화면은 카메라 기준이기 때문에 게임 세상의 World 좌표계에서 카메라 좌표계로 모든 물체들을 변환해야 한다. 그리고 화면에 출력될 물체는 카메라가 촬영하는 공간 안에 들어와있어야 하며 이것을 투영이라고 한다. 카메라가 촬영하는 공간을 Clip Space라고 한다. 마지막으로 화면 해상도에 맞게 화면을 조정해주면 모든 과정이 완료된다. 과정을 정리하자면,

Local 행렬 - 물체만의 세상에서 상대적인 물체의 위치를 정한다.
World 행렬 - 게임 세상에서 각 물체의 위치를 정한다. (물체마다 world 행렬 한개씩)
View 행렬 - 카메라 위치 기준 좌표계
Projection - 카메라가 잡고 있는 범위 내 물체들을 투영
Screen - 해상도에 맞게 비율을 조절
Local → World 변환 행렬


왼손 좌표계일 때 특정 좌표 (x,y,z,1)에 위 행렬을 곱해주면 World좌표 (X,Y,Z,1)이 나온다. 위 행렬의 Right, Up, Forward 3줄은 Rotation을 의미하고 Pos는 Translation을 의미한다. Scale은 Right, Up, Forward 에 곱해진다.
World → View 변환 행렬

View 좌표계는 카메라 기준 좌표계이다. 즉 View 좌표계는 카메라의 Local 좌표계라고 할 수 있다. 그래서 카메라의 World 변환 행렬을 구한 다음 그 역행렬을 구하면 카메라의 Local 행렬, 즉 View 행렬을 구할 수 있다.
다른 방법으로 생각해보면, 나머지 물체들에게 카메라가 이동한만큼 반대로 이동하게 하는 것이다. 그래서 Translation의 역행렬, Rotation의 역행렬을 곱한다. 순서가 Translation 먼저인 이유는 R X T 의 역행렬은 T(역)XR(역)과 같기 때문이다. Rotation에 영향을 주는 축 3개는 모두 직교 행렬이다. x축, y축, z축은 모두 직교하고 있기 때문이다. 직교행렬은 역행렬을 구하는 것이 매우 간단한데 전치 행렬이 역행렬이 된다. 그래서 Rotation의 역행렬은 전치행렬이고, Translation의 역행렬은 반대로 이동하는 것과 같기 떄문에 -를 붙여준다. 그래서 두 역행렬을 곱해주면 View 행렬이 된다.


'그래픽스' 카테고리의 다른 글
| [DX12] Normal Mapping (0) | 2022.02.28 |
|---|---|
| [DX12] Projection, Screen 변환 행렬 (0) | 2022.02.26 |
| [DX12] 좌표계 변환 행렬 (0) | 2022.02.25 |
| [DX12] 삼각형 그리기 (0) | 2022.02.24 |
| [DX12] 장치 초기화 개요 (0) | 2022.02.20 |