#3. 투영행렬
3D 장면을 2D로 표현
즉, n차원에서 n-1차원을 얻는 과정이다.
투영을 할거면 절두체가 세팅되어 있어야 한다.
투영스페이스는 절두체를 정규화 시켜놓은 공간이다.
x : -1 ~ 1
y : -1 ~ 1
z : 0 ~1
->z가 0 ~ 1 인 이유는 카메라는 뒤를 볼 수 없기 때문
투영변환행렬을 적용해주고 z값을 나누어야, 투영변환이 끝이 난다.
여기서 W는 r(종횡비 : Aspect : WinX/WinY)로 나누어주어야 하는데, 뷰포트 과정에서 오브젝트가 늘어나거나 줄어드는 과정을 반대로 먼저 늘리거나 줄여서 뷰포트 과정후에도 오브젝트의 크기가 변경되지 않도록 한다.
-> 투영스페이스는 정사각형 이므로 크기 왜곡을 피하기 위해 미리 종횡비로 나누어 주는 것
각각 tanf(fovY/2.f) 로 나누어 주기 때문에 tan값이 커질수록 작아짐
-> 즉, 시야각이 커질수록 작게보임
A와 B는 Z값을 구하기 위한 식으로
Z값에 0과 1을 대입해서 풀어주면 A와 B값을 유도 할 수 있다.
z값에 near를 넣었을때 연산후 n으로 나누었을때 결국 z값은 0이 되고
z값에 far를 넣었을때 연산후f으로 나누었을때 z값은 1이 되어야 한다.
그에 따라 계산을 해주면 A, B값을 유도 할 수 있다.
34행렬(A의 오른쪽)에 있는 1은 Z값을 보관해주기 위한 것이다.
* Z구하는 식 유도 과정을 아래 블로그를 참고했습니다.
Leeminsang: 투영 행렬 ( Persfective projection matrix ) (leeminsang19930211.blogspot.com)