본문 바로가기

IT 기술

OpenGL(기초)

반응형
OpenGL의 기본 틀에 대하여 설명하겠습니다.
먼저 아리 소스코드는 검은 바탕에 흰 사각형을 출력하도록 만든 간단한 예제 소스입니다.


그리고 이 소스를 실행시켰을 때의 화면 입니다.


위의 프로그램은 매우 간단해 보이지만 사실 지엘 프로그램의 필수 요소를 모두 갖추고 있다는 점에서 이 프로그램은 지엘 프로그래밍의 기본 틀이라 할 수 있습니다. 
소스코드의 main함수는 모두 GLUT 함수로 구성되어 있습니다. glutCreateWindow()는 GLUT에게 새로운 윈도우를 생성하라는 명령이고, 파라미터는 윈도우의 타이틀에 나타나게 됩니다.
glutDisplayFunc는 MyDisplay라는 함수를 디스플레이 이벤트에 대한 콜백함수로 등록한 것입니다. 다시 말해서 어떤 명령을 실행하라는 것이 아니고 화면 디스플레이 이벤트가 발생할 때 실제로 어떤 함수를 호출해야 하는지를 등록하는 함수입니다. glutMainLoop()는 이벤트 루프를 돌리는 것입니다. 간단하게 말해서 이제 이벤트 별로 콜백함수를 등록 했으니 이벤트 루프로 진입하라는 함수입니다. 따라서 모든 지엘 프로그램은 항상 이 함수로 끝나게 됩니다.

MyDisplay()를 살펴봅시다.
가운데 흰색 사각형은 glBegin()과 glEnd()사이에 정의되어 있습니다. GL_POLYGON은 다각형을 의미하는데 아래 제시된 정점들이 다각형을 이루고 있는 것을 볼 수 있습니다. 다각형은 glVertex3f()에 의해 입력된 4개의 정점들로 구성되며 정점 좌표는 윈도우 한 가운데를 (0.0, 0.0, 0.0)으로 하고 윈도우 우상단을 (1.0, 1.0, 1.0)으로 하는 기본 윈도우를 기준으로 정의한 값입니다. glFlush()함수는 현재까지 쌓인 명령어 모두를 무조건 프로세서에게 전달하도록 강제하는 명령입니다.

위의 gultDisplayFunc(MyDisplay)에 주목해 봅시다. 지엘 프로그램은 윈도우 기능 및 입출력 제어에 있어서 GLUT 라이브러리를 이용합니다. GLUT는 지엘 프로그램과 드라이버 사이에서 인터페이스 역할을 하는 것입니다. 그러므로 프로그래머는 드러이버에 명령을 내리는 것이 아니라 GLUT에게 명령을 내리면 GLUT에서 드라이버로 명령을 전달하는 것입니다. GLUT는 프로그래머가 등록한 함수를 콜백 테이블 형태로 저장하며 이 테이블에는 이벤트 타입별로 불러야할 콜백함수 명이 저장됩니다. 이후 GLUT는 드라이버로부터 받은 이벤트 레코드를 참고로 이벤트 타입을 판단하고 테이블을 검색하여 그에 맞는 콜백함수를 호출합니다. 콜백함수 중에서 Idle 콜백함수를 정의하면 자동으로 아이들 콜백 함수가 호출되어 실행되는데 이 함수는 주로 다른 모든 이벤트가 없는 시간을 활용하여 필요한 계산을 하는데 사용됩니다. 다음은 이벤트 타입별 콜백함수입니다.

  이벤트 타입  콜백함수 프로토타입  콜백함수 등록 명령 
 DISPLAY   void MyDispaly();   glutDispalyFunc(MyDispaly)
  MOUSE  void MyMouse(int button, int state, int x, int y);   glutMouseFunc(MyMouse)
 KEYBOARD  void MyKeyboard(char key, int x, int y);  glutKeyboardFunc(MyKeyboard)
 RESHAPE   void MyReshape(int width, int heigh);  glutReshapeFunc(MyReshape)
  IDLE  void MyIdle();   glutIdleFunc(MyIdle)

또한 지엘에서 콜백함수 사이에 어떤 값을 전달하는 데에는 전역변수를 사용합니다. 그 이유는 콜백함수끼리 파라미터를 전달할 수 없기 때문입니다.
반응형

'IT 기술' 카테고리의 다른 글

OpenGL 용어 및 함수 이것저것..(2)  (0) 2012.01.25
OpenGL 용어 및 함수 이것저것..(1)  (0) 2012.01.25
하프 토우닝과 디더링  (0) 2012.01.25
컬러모드  (0) 2012.01.25
컬러모델  (0) 2012.01.25