GLUT 사용법
GLUT의 event-driven 방식은 GUI 프로그래밍을 해봤으면 익숙할 것이다. 먼저 OpenGL 어플리케이션에서 main
함수에서 통상 사용되는 형태를 살펴 보자.
int main(int argc, char **argv) {
// init GLUT and create Window
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(600,600);
glutCreateWindow("COSE436 - Assignment 1");
// register callbacks
glutDisplayFunc(renderScene);
glutIdleFunc(renderScene);
glutReshapeFunc(changeSize);
glutKeyboardFunc(keyboard);
glutIdleFunc(idle);
...
// enter GLUT event processing cycle
glutMainLoop();
return 1;
GLUT 함수 소개
glutInit
: 어플리케이션이 cmd 인자를 받을 수 있도록 허용하고, 시스템을 초기화한다.
glutInitDisplayMode
: 디스플레이 모드를 설정한다. 여기서는 GLUT_DEPTH
, GLUT_DOUBLE
, GLUT_RGBA
를 사용했는데, 각각 Depth buffer 사용, 더블 버퍼링 사용, RGB 컬러 모드 사용을 의미한다.
glutInitWindowPosition
: 윈도우의 위치를 픽셀 단위로 지정한다.
glutInitWindowSize
: 윈도우의 크기를 픽셀 단위로 지정한다.
glutCreateWindow
: 윈도우를 생성한다.
아래 함수들은 callback 함수들을 등록하는 함수에 해당한다.
glutDisplayFunc
: 디스플레이 콜백 함수를 등록한다. 이 콜백 함수는 GLUT에 의해 윈도우가 처음 생성되거나, 윈도우가 다시 그려질 때 호출된다.
glutReshapeFunc
: 윈도우의 크기가 변경될 때 호출되는 콜백 함수를 등록한다.
glutKeyboardFunc
: 키보드 콜백 함수를 등록한다. 키보드 이벤트가 발생할 때 호출된다.
glutIdleFunc
: idle 콜백 함수를 등록한다. idle 콜백 함수는 GLUT에 의해 다른 이벤트가 발생하지 않을 때 호출된다.
아래 함수는 main 함수의 마지막 부분에 호출되는 메인 이벤트 루프 진입 함수이다.
glutMainLoop
: GLUT의 메인 이벤트 루프에 진입하여, 이후 발생하는 이벤트를 처리할 수 있도록 한다. 이 함수는 호출되면 무한 루프가 시작되므로 리턴하지 않는다.
Callback 함수 예시
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 'q':
case 'Q':
case 27: // ESC
exit(0);
break;
}
}
이 함수를 glutKeyboardFunc
의 인자로 전달하여 callback 함수로 등록하면, 키보드 이벤트가 발생할 때(예: 키보드 입력)마다 이 함수가 호출된다.
참고 문헌
- COSE436 ppt slides, Won Ki Jeong(wkjeong@korea.ac.kr)