투영은 3차원 물체를 2차원 화면으로 사상(맵핑)하기 위한 작업으로 가시변환(Viewing Transformation)이라고도 한다.

1. 평행 투영
물체로 부터 무한대의 거리에 시점이 있다하고, 투상선을 나란히 가져가는 방법. 아무리 멀리 있어도 같은 크기로 표시 된다.

2. 원근 투영
물체로부터 유한한 거이에 시점이 있다고 간주하고 모든 투상선이 시점에서 출발하여 방사선 모양으로 퍼져나가는 방법이다.
사람의 눈이 물체를 포착하는 것처럼 멀리 있는 물체는 작게 보인다.

투영을 할떄는 항상 투영 범위를 제한 해야 한다. 투영 범위를 가시부피 라고 하고, 시점에 가까운 쪽을 전방 절단면, 멀리 떨어진 면을 후방 절단면 이라 한다. 전방,후방 절단면에 의해 그 밖에 있는 물체는 보이지 않는다.


OpenGL에서는 투영을 설정 하려면 먼저 glMatrixMode(GL_PROJECTION)으로 행렬을 투영행렬로 바꿔 줘야한다. 만약 평행 투영을 하려면 OpenGL에서는 glOrtho라는 함수를 사용해서 평행 투영을 지원한다. 그리고 원근 투영은 OpenGL에서 제공하는
 glFrustum함수와 GLU에서 제공하는 gluPerspective함수 2가지중 하나를 사용 할수 있다.

void glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);
제일 왼쪽부터 왼쪽, 오른쪽, 아래쪽, 위쪽, 앞쪽, 뒤쪽으로 넘겨받은 파라미터로 육면체를 만들어 평행투영을 시킨다.

void glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);
제일 왼쪽부터 왼쪽, 오른쪽, 아래쪽, 위쪽, 앞쪽, 뒤쪽으로 넘겨받은 파라미터로 육면체를 만들어 원근투영을 시킨다.

void gluPerspective( GLdouble fov, GLdouble aspect, GLdouble near, GLdouble far);
fov는 투영을 시키는 시야 각이고, aspect는 뷰 윈도우의 종횡비이고, near과 far은 전방 후방 절단면이다.

주의할점은 near, far은 항상 양의 값을 가줘야 한다.

뷰포트 변환
뷰포트 변환 이란 정규화 장치좌표계에서 화면 좌표계로 가는 작업이다.

OpenGl에서는 glViewport라는 함수를 사용해 뷰포트를 설정 할 수 있다.

void glViewport(GLint left, GLint bottom, GLsizei width, GLsizei height);
left, bottom은 좌하단의 좌표 이고 이것을 기준으로 폭을 width, 높이를 height만큼의 사각형을 정희 한다.





'라이브러리 > OpenGL' 카테고리의 다른 글

프래그먼트와 GL의 버퍼  (0) 2009.06.12
텍스쳐  (0) 2009.04.03
에일리어싱과 앤티-에일리어싱  (0) 2009.04.03
가시성 판단  (0) 2009.03.31
조명과 음영  (0) 2009.03.24
OpenGL의 모델변환 및 행렬스택  (0) 2009.03.22
기하 변환  (0) 2009.03.22
3차원 물체의 표현  (0) 2009.03.22
디스플레이 리스트  (0) 2009.03.22
정점배열  (0) 2009.03.22
Posted by crownog
,