일단 물체를 Local Space -> World Space로 보내야 함
당연히 W = SRT
이제 World Space -> Camera Space로 보내야 함
Camera Space -> World Space로 보내는 W = SRT의 역행렬을 곱해주면 될 것.
그런데 동일 공간상의 변환이므로 Scale 변환은 의미가 없다. S를 버려주자
이제 Camera Space -> Projection Space로 보내주면 끝난다.
Near Plane과 Projection Window를 동일하게 놓고, height를 2로 두면 width 는 2r (r은 종횡비)
d, r이 있으므로 를 구할 수 있다.
는 r에 의해 결정된다.
(x, y, z)를 projection space로 보내면 (x', y', z')
y에도 똑같이 성립된다.
x', y'를 r로 나눠보자.
따라서
x, y는 선형 변환이 가능하다.
하지만 z는 선형 변환이 안됨(z로 나누어 투영을 처리하기 때문)
따라서 z 나누는 연산을 뒤로 미루고 선형행렬을 구성한다.
Z축 값에는 X, Y값이 없으므로 0 A, B는 무슨 값이 들어갈지 모르므로 상수 A, B를 설정.
나중에 z로 나누기 위해서는 z값이 존재해야 하는데 동차 좌표상의 w값에 이 값을 잠시 복사해 두면 된다.
그래서 3행 4열 성분과 4행 4열 성분을 각각 1과 0으로 설정
최종적으로 구해진 (zx', zy', zz', z)를 w값인 z로 나누면
투영된 z는 depth test를 위해 0~1 사이의 값을 가져야 한다.
이를 위해 구해진
의 A,B를 구해야 함.
z에 0,1을 각각 대입하여 B에 대해서 풀면
B = -An이 나오고, 이에 따라 풀어내면
아까 구했던 행렬에 집어넣으면
끗!
'기타 개발관련' 카테고리의 다른 글
DirectX 11.0 + Visual Studio 2015 조합에서 Effect11.lib 문제 해결 (0) | 2016.04.20 |
---|---|
Visual Studio에서 Precompiled Header 만들기. (0) | 2016.03.25 |
Visual Studio의 NuGet 패키지 프로젝트에 포함시키기 - Visual Leak Detector (0) | 2016.03.25 |