3차원 공간에서 다수의 물체를 그릴 때, 그리는 순서를 고려하지 않으면
나중에 그려지는 물체가 먼저 그려진 물체보다 무조건 앞에 그려지게 됨
카메라로 만들어지는 사영 공간의 z 값에 범위를 설정하여
사각뿔에서 꼭지가 잘라진 육면체를 만들 수 있는데, 이를 절두체라고 함
카메라와 가까운 평면을 근평면(Near plane), 먼 평면을 원평면(Far plane)이라 함
근평면의 z축 값을 -1, 원평면의 z축 값을 1이라고 하여, (directX는 0 ~ 1)
NDC 공간을 3차원으로 확장
=>
(z축 값의 -값을 곱하여)
NDC 공간은 왼손 좌표계로 변환된다
- 최종 투영 행렬
카메라의 z축 시작 값은 n
카메라의 z축 끝 값은 f라고 해보자
뷰 좌표계 (0, 0, -n), (0, 0, -f)
=>
NDC 좌표계 (0, 0, -1), (0, 0, 1)
기존 투영 행렬에서 z축 값들을 구해야 한다.
P⋅ vview=⎣⎢⎢⎢⎡ad0i00dj000k−100l0⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡vxvyvz1⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡ad⋅vxd⋅vy?−vz⎦⎥⎥⎥⎤
깊이 값은 x와 y에 직교하기 때문에 i와 j는 0이다.
(0, 0, -n)일 때 (0, 0, -n, n)이 나와야 하기 때문에
P⋅ vview=⎣⎢⎢⎢⎡ad0000d0000k−100l0⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡00−n1⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡00−nn⎦⎥⎥⎥⎤
위와 같아야 하고 아래의 식을 구할 수 있다.
−kn+l=−n
(0, 0, -f)일 때 (0, 0, f, f)가 나와야 하기 때문에
P⋅ vview=⎣⎢⎢⎢⎡ad0000d0000k−100l0⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡00−f1⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡00ff⎦⎥⎥⎥⎤
위와 같아야 하고 아래의 식을 구할 수 있다.
−kf+l=f
두 식의 연립 방정식을 풀면 k와 l을 구할 수 있고 이는 최종적으로 아래와 같다.
P=⎣⎢⎢⎢⎡ad0000d0000n−fn+f−100n−f2nf0⎦⎥⎥⎥⎤