시점좌표*투상행렬 = 절단좌표, 시점 좌표계에서 절단 좌표계로의 이동
->투상 행렬은 가시 부피를 정의하고, 가시 부피를 정규화 가시 부피로 변환하기 위한 것이다.
(glOrtho(), glFrustum(), gluPerspective()등은 현 투상 행렬의 내용을 지정하는 함수)
*실제의 투상변환에는 투상 범위를 제한, 제한된 크기의 뷰 윈도우에 모든 물체의 영상이 맺히게 할 수 없기 때문
* 가시 부피(View Volume) : 투상범위
* 전방 절단면(Near Clipping Plane, Near Plane, Front Plane, Hither) : 투상선에 수직으로 놓인 평면 중, 시점에 가까운 쪽
* 후방 절단면(Far Clipping Plane, Far Plane, Back Plane, Yon) : 시점에서 멀리 떨어진 면
-> 뷰 윈도우 모서리를 지나가는 4개의 투상선과 전후방 절단면에 의해 형성되는 육면체가 바로 평행 투상의 가시 부피이다.
* 정규화 가시 부피(CVV : Canonical View Volume)
: 정규화 변환으로 가시 부피의 모습을 바꾸는 변환,
가로,세로,높이가 각각 2인 정육면체로 투상하는 변환, 시점 좌표계의 원점은 정규화 가시부피의 정중앙에 위치한다.
*가시부피 그대로를 사용하지 않고 정규화 가시 부피를 이용하는 이유
1) 평행 투상, 원근 투상 모두 동일한 모습의 정규화 가시 부피를 사용함으로써 파이프라인 처리 구조가 동일해지기 때문
2) 가시 부피 밖의 물체를 절단하는데 있어서 정규화 가시 부피인 정육면체를 기준으로 하는 것이 원래의 가시 부피를 그대로 놓고 절단하는 것보다 훨씬 단순하기 때문
3) 시점 좌표계 원점을 중심으로 가로, 세로 길이를 1로 정규화함으로써 화면 좌표계로 변환하기 수월해지기 때문
위 그림처럼 물체의 투상은 여러 단계를 거친다, 이를 3단계로 나누면 아래와 같다.
* 1단계 투상
-> 물체의 정점은 일단 절단 좌표계로 변환, 이 좌표계에서 정규화 가시 부피 내의 모든 정점은 동차 좌표(Homogeneous Coordinate)로 표시된다.
지엘의 절단 알고리즘은 동차 좌표 공간에서 이루어진다.
* 2단계 투상
-> 절단 작업이 끝나면 동차 좌표가 실제로 의미하는 3차원 좌표로 바꿔야 한다.
동차 좌표(x, y, z, w)의 마지막 요소인 w로 나머지 값을 나누는 작업이다.-> (x/w, y/w, z/w, 1) , 이 작업을 '원근 분할'이라 한다.
원근분할 결과, 물체 좌표는 정규화 장치 좌표계(NDCS:Normalized Device Coordinates System)로 바뀐다.
* 3단계 투상
-> 정규화 가시 부피의 z=0 평면이 화면의 윈도우 또는 뷰포트로 투상된다.
투상된 2차원 좌표 (x/w, y/w)는 다시 뷰포트의 크기에 비례하여 화면에 뿌려진다.
'Software Development > Graphics' 카테고리의 다른 글
컴퓨터 그래픽스 이론 정리 - 후면제거, 표면과 이면 (0) | 2018.06.09 |
---|---|
컴퓨터 그래픽스 이론 정리 - 벡터, 평면 표현 (0) | 2018.06.09 |
컴퓨터 그래픽스 이론 정리 - 투상(Projection) (0) | 2018.05.22 |
컴퓨터 그래픽스 이론 정리 - 동족(Affine)좌표와 동차(homogeneous)좌표 (0) | 2018.05.06 |
컴퓨터 그래픽스 이론 정리 - 좌표계 (0) | 2018.05.06 |