뷰 공간
월드 공간은 굉장히 넓은 영역이다. 이 영역을 다 보여줄 순 없고, 플레이어가 특정 원하는 지점을 보여줘야 하는데
이러한 화면을 보여주기 위해 하나의 '가상 카메라' 가 있다고 생각하는 것이다.
화면에 대응하는 카메라를 만들고 이 카메라를 중심으로 화면이 보이도록 해야한다.
이를 위해서는 카메라를 중심으로 물체의 정보를 재조정하는 작업이 필요하는데, 카메라를 중심으로 변환한 공간을 뷰 공간 (View Space) 라고 한다.

사실 뷰 변환이라는건 별거 없다.
모든 정점을 '카메라 위치로 재변환' 하는것인데 이를 다르게 생각해보면
1. 카메라를 원점으로 보낸다
2. 원점으로 보낸 변환을 모든 오브젝트에 적용한다
-> 카메라는 원점에 있으며 모든 오브젝트는 카메라의 변환만큼 카메라와 동일하게 이동했다.
가 되는것이다.
즉 카메라에 적용된 월드변환의 역행렬을 모든 오브젝트에 적용시키면
카메라는 원점에 있으면서, 모든 오브젝트가 카메라의 공간에 온 것처럼 되는 것이다.
예) 카메라가 (-10, -10)에 있고, 오브젝트가 (10, 10) 에 있다고 생각해보자
카메라가 원점으로 돌아가려면 (x, y) 에 10씩 더해주면 된다.
그럼 카메라가 (0, 0) 일때 오브젝트는 (20, 20) 에 있게 되고, 거리는 카메라가 원점으로 돌아가기 전과 동일하다.
이 개념을 가지고 뷰 공간으로 변환해주는 뷰 행렬을 설계해보자.
카메라는 크기의 개념이 없기때문에, 카메라는 회전과 이동만으로 구성된다.
카메라의 이동행렬의 역행렬은 다음과 같다
[100001000010−Tx−Ty−Tz1]
덧셈의 역원인 반대수를 생각해보면 이동행렬의 역행렬은 당연하다.
다음은 카메라의 회전행렬의 역행렬이다.
일단 카메라의 회전행렬이 다음과 같다고 생각해보자
[XxXyXz0YxYyYz0ZxZyZz00001]
회전행렬의 역행렬은 전치행렬이라는것을 알아야 한다.
( -theta 만큼 회전했다고 생각했을 때, 삼각함수의 성질을 생각하면 sin(-theta) 부분들은 다 -sin(theta)가 된다. 이를 2차원 회전 변환에 대해서 생각해보면, 전치행렬이다. )
즉 회전행렬의 역행렬은 다음과 같다.
[XxYxZx0XyYyZy0XzYzZz00001]
우리가 기존에 아핀 변환 행렬은 SRT 로 만들었다.
역행렬은 순서가 반대가 되어야 하므로
Vview=T−1R−1
Vview=[100001000010−Tx−Ty−Tz1][XxYxZx0XyYyZy0XzYzZz00001]=[XxYxZx0XyYyZy0XzYzZz0−dot(T,X)−dot(T,Y)−dot(T,Z)1]
라는 결과가 나온다.
(여기서 dot은 T와 각 X, Y, Z요소가 곱해지면 내적과 동일함을 의미한다.)