월드에서의 좌표가 어떻든 카메라 관점에서 봤을 때 카메라는 세상의 좌표와 반대로 바라보는 모습이 됩니다. 결국 서로 반대되는 좌표계로 인해 x와 y값이 예상과 다르게 반대로 뒤집힐 것입니다.
따라서 원래 좌표계를 사용하고자 한다면 카메라를 180도 회전시켜서 +z축이 카메라 뒤편을 향하게 하면 우리가 원하는 좌표계로 물체가 나타납니다.
카메라에는 크기의 개념이 없기 때문에, 카메라의 트랜스폼은 크기 변환을 제외한 회전과 이동변환으로만 구성 된다. 카메라의 트랜스폼에 저장된 위치 값을 t(t1, t2, t3)로 지정하고 로컬 축 값을 각각 x = (x1, x2, x3) y = (y1, y2, y3), z = (z1, z2, z3)로 지정해보자. 그러면 이동행렬 T와 회전행렬 R은 다음과 같다.
회전 변환 역시 이동 변환과 동일하게 역행렬을 적용시킨다. 예를 들어 물체는 가만히 있는데 카메라가 30도 회전하는 상황이라면, 화면을 바라보는 사용자는 마치 물체가 -30도 회전하는 것으로 느낄 것이다. 직교행렬인 회전 변환행렬 R의 역행렬 R-1은 다음과 같이 전치 행렬로 구할 수 있다.
이동행렬의 역행렬도 마저 구해보자.
이 둘을 곱한 최종 뷰 변환 행렬은 다음과 같다.
이동의 역행렬을 먼저 적용할지, 회전의 역행렬을 먼저 적용할지를 선택해야 한다. 적용 순서를 곰곰히 생각해 본다면 이동의 역행렬을 적용한 후에 회전의 역행렬을 적용해야 함을 알 수 있다. 왜냐하면 카메라에 회전을 적용할 시점에 모든 좌표는 카메라를 중심으로 변환되어 있어야 하기 때문이다. 이는 트랜스폼 순서를 거꾸로 돌리는 것과 동일한 원리로 볼수 있다.
정리하면 크기변환 S를 제외한 카메라의 트랜스폼으로 부터 얻어지는 모델링 행렬은 다음과 같다. M = R * T
모델링 행렬의 역행렬 M(-1) 은 바로 뷰 행렬이 되며, 다음과 같이 전개된다. M(-1) = ( T * R ) (-1) = R(-1) * T(-1)