/ PROGRAMMING, GRAPHICS, GUI, OPENGL

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 함수로 등록하면, 키보드 이벤트가 발생할 때(예: 키보드 입력)마다 이 함수가 호출된다.


참고 문헌