행렬곱으로 계산하게 되는데 크자이공부 순서로 곱해져야 한다. 순서가 달라지면 결과 달라질 수 있음.
항등행렬은 교환법칙이 성립하게 만드는 행렬이다. 무조건 항등행렬로 만들어 놓는 것을 원칙으로 한다.
어떤행렬 X 항등행렬 = 어떤행렬
항등행렬 X 어떤행렬 = 어떤행렬
행렬 == 차원이자 공간.
(내가 바라보는 공간, 카메라가 바라보는 공간, 캐릭터의 공간, ... )
공간을 정의하는 것은 크기, 회전, 위치이다.
이미 항등행렬에도 크기, 회전, 위치가 다 들어가있는 상태다. 3차원 변환행렬임!
크기행렬에 해당하는 해당하는 곳의 값을 바꿔서 곱하면 그만큼 크기에 영향을 주게 된다.
아래 사진에서 네모박스를 회전시켜 봤을 때 당연하게도 더 넓은 면적으로 보인다. 회전이 우리 눈에 보이는 크기에 영향을 미치는 것을 알 수 있다. -> 크기행렬은 회전행렬에 포함되어 있다.
이게 사실 회전행렬 곱하는 것과 같은 식임.
(Z축 회전예시)
{50, 50, 0, 0} 만큼 이동시킬 때
W가 0일 때 (주황색이 위치행렬 부분)
50 + 0 + 0 + 0 = 50
이동시킨 X값이 50이 된다.
W가 1일 때 (주황색이 위치행렬 부분)
50 + 0 + 0 + 100 = 150
이동시킨 X값이 150이 된다.
View 행렬(뷰행렬)은 카메라 행렬을 의미한다. WinApi때의 카메라랑 크게 다를 건 없는데 회전을 할 수 있다.
뷰행렬의 역할은 "어떤 카메라가 어떤 물체들을 보고 있다"를 만들어 내는 것이다.
즉 뷰 행렬 역할은 카메라를 원점이 되도록, 세상의 기준이자 중심이 되도록 하는 것이다.
카메라가 기준되어
카메라의 위치가 0,0,0
카메라의 회전이 0,0,0 이 되게 하는 행렬이다.
모든 것들이 카메라를 기준으로 공전하게 됨
로컬 스페이스 -> 월드 스페이스 -> 뷰 스페이스 중에
월드 스페이스 -> 뷰 스페이스
카메라 뒤쪽 즉, Z값이 음수인 곳은 안 보여도 되는 부분들이 된다.
(로컬 스페이스는 매쉬를 생각하면 된다)
그래서 카메라 45도 돌아있다면 뷰행렬은 카메라를 회전하지 않은 상태로 만드는 것이 첫번째다. 카메라를 포함해서 나머지도 모두 -45도 돌아가게(공전하게) 만들면 된다.
그리고 그 역방향의 회전행렬을 구하는 것은 쉽다. 전치 행렬을 만들면 된다. 기존 회전행렬의 반대되는 회전행렬을 만들면 된다.