렌더 파이프 라인에서 Vertex Shader 단계의 마지막에, 지정된 좌표를 받아들이고 이 범위에서 벗어난 모든 좌표는 자르게됩니다. 이때, Clip 된 좌표들은 모두 폐기되고, 남은 좌표들은 최종적으로 파편화되어 화면에 보이게 됩니다. 이때, 눈에 보이는 모든 좌표들이 -1.0과 1.0 범위 안에 지정하는 것은 직관적이지 않기 때문에, 우리가 원하는 화면에 표현하기 위한 공간으로 다시 변환하게 됩니다. 이때 사용되는 것이 NDC(Noramlize Device Coordinate)이며, 이 공간은 투영(Projection) 행렬에 정의됩니다.
앞서 유도한 투영 행렬이 정의하는 Viewing Box는 절두체(Frustrum)라고 불립니다. 이 절두체 내부에 있는 좌표들은 화면에 나타나게 됩니다. 지정한 범위 내에서 NDC로 변환하는 전체적인 과정을 '투영한다'라고 합니다. 3D좌표를 2D에 매핑하기 쉬운 NDC로 투영하기 때문입니다.
정규 좌표(NDC)는 1을 기준으로 하는 2차원 좌표입니다. 이 좌표계의 원점은 화면(Device)의 정 중앙에 위치하며, 화면의 우상단 좌표가 (1.0, 1.0), 좌하단 좌표가(-1.0, -1.0)이 됩니다.
정규 좌표를 사용하면 해상도에 따른 화면좌표 계산이 단순화됩니다. x좌표를 계산할 때 계산하는 과정을 줄일 수 있으며, 해상도를 제외한 값을 계산해 두면 해상도가 변할 경우에도 쉽게 실제 화면 좌표를 계산할 수 있게 됩니다.
즉, 화면 해상도 차이에 빠르게 적응하기 위한 하나의 도구입니다.
'게임 수학' 카테고리의 다른 글
정수만 사용해 선 빠르게 그리기 (0) | 2019.12.17 |
---|---|
삼각형 빠르게 칠하기(Flat Shading) (0) | 2019.12.17 |
투영 행렬 유도하기 (0) | 2019.12.17 |
백페이스 컬링 (0) | 2019.12.17 |
벡터 내적과 외적을 응용한 왼쪽과 오른쪽의 판별 (0) | 2019.12.17 |