OpenGL 기초

Programming/OpenGL 2013. 12. 26. 15:57 Posted by gaeddong2

GLUT_SINGLE

싱글 버퍼 창을 사용할 것을 의미

모든 드로잉 명령이 출력 창에서 진행됨을 뜻하는 것이다.

이와 반대로 더블 버퍼 창의 경우는 드로잉 명령이 오픈 스크린 버퍼에서 실행된 후출력창으로 옮겨지는 방식으로 진행된다이러한 더블 버퍼 방식은 애니메이션 효과를 낼 때 주로 사용된다.

 

glutDisplayFunc(RenderScene)

전에 선언된 RenderScene 함수를 출력 콜백 함수로 만드는 역할을 한다.

이는 창이 그려져야 할 떄 GLUT가 여기서 지정된 함수를 호출하도록 만든다는 의미이다.

창이 처음으로 출력될 때나 창의 크기가 변경될 떄최소화되었다가 다시 등장할 때 이 함수가 호출된다.

OpenGL 렌더링 함수가 호출되는 곳이기도 하다.

 

glutMainLoop()

이 함수는 GLUT프레임웍을 실행하는 기능을 한다.

화면 출력에 대한 콜백과 다른 함수들을 정의하는 것이다

프로그램이 종료될 때까지 운영체제와 관련된 메시지입력 등을 처리하는 것으로 GLUT의 일을 마무리 한다.

 

glClearColor

이 함수는 창을 지우는데 사용할 색상을 지정하는 것

 

glClear

지정된 색으로 화면은 지우는 것

특정한 버퍼나 버퍼 조합의 내용을 지우는 기능을 한다버퍼란 이미지 정보를 담는 공간을 의미하는 것으로드로잉에 사용되는 적색녹색청색 요소를 색상 버퍼 또는 픽셀 버퍼라고 한다.

 

glFlush()

실행되지 않은 모든 OpenGL명령을 실행하도록 한다.

 

glutReshapeFunc(ChangeSize)

OpenGL은 좌표를 실제 창 내의 어디에 위치시킬까 이 과정은 콜백 함수인 ChangeSize에서 이루어진다.

이 함수는 창의 큭기ㅏ 변할 때마다 실행되며출력 콜백 함수와 같은 방식으로 설정 된다.

창 크기가 변경될 때마다 좌표를 초기화해야 한다.

창의 크기가 변한 것을 감지하는 방식은 환경에 따라 다르기 때문에 , glut 라이브러리는 glut ReshapeFunc라는 함수를 통해 창의 크기가 변할 때마다 glut 라이브러리가 호출할 콜백을 등록할 수 있도록 하고 있다.

 

<뷰포트클리핑 영역>

창이란 픽셀 단위로 측정되는 2D 영역

클리핑 영역과 창의 픽셀 수가 맞아떨어지는 경우는 드물다따라서 논리적 직교 좌표를 물리적인 화면 픽셀 좌표로 전환하는 과정이 필요하다이 때 사용되는 것이 뷰포트라는 개념이다.

뷰포트는 창의 클라이언트 영역 내에 클리핑 영역을 그리는데 사용되는 영역을 말하며클리핑 영역을 창에 적용시키는 기능을 한다대개 뷰포트는 전체 창에 대해 적용되지만반드시 그럴 필요는 없으므로 원하는 부분만 맵핑하는 것도 가능하다.

 

뷰포트설정

void glViewport(GLint x, GLint y, GLsizei 너비, Glsizei 높이)

x,y 인자는창 내에 위치하는 뷰포트의 좌측 하단 좌표를 의미하며너비와 높이 인자는 각각 뷰포트의 너비와 높이를 의미한다대개 x좌표는 모두 0으로 설정된다.

뷰포트 설정이 끝나면 실제로 그림을 그려 넣은 공간이 지정되고현재 클리핑 영역이 이 공간에 맵핑된다.

 

클리핑 영역 설정

클리핑 영역을 조정하여 종횡비가 맞도록 해야 한다.

종횡비란 너비와 높이의 비율을 말한다.

클리핑 영역의 설정을 위해 glOrtho방식이 있다.

 

void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, Gldouble top, Gldouble near, GLdouble far)

left, right는 x축의 최소값과 최대값을, bottom과 top은 y축의 최소값과 최대값을, near와 far는 z축의 최소값과 최대값을 의미힌다.

z축의 경우는 관측자로부터 가까워짐과 멀어짐을 의미한다.

 

glLoadIdentity()

행렬 처리가 이루어지기 전에 좌표계를 초기화하는 역할그 이유는 glOrtho의 작동 방식이 새로운 클리핑 영역을 만드는 것이 아니라 기존의 클리핑 영역과 행렬을 곱한 값을 새로운클리핑 영역으로 지정하기 때문이다.

 

void glutTimerFunc(unsgined int 밀리초, void (*func)(int ), int )

밀리초만큼 대기했다가 func함수를 호출할 수 있으며값 부분에는 사용자 정의 값을 넣을 수 있다.