반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

폴크(FOLC)

OpenGL 툴킷 라이브러리 - GLUT 본문

교육 관련/C++

OpenGL 툴킷 라이브러리 - GLUT

folcjin 2025. 4. 26. 11:30
728x90
반응형

GLUT란 무엇인가?

GLUTOpenGL 프로그램을 쉽게 작성할 수 있도록 도와주는 툴킷 라이브러리입니다.

  • "OpenGL은 3D 그래픽스 그리기만 담당"합니다.
  • 그런데 OpenGL 자체윈도우 생성이나 키보드, 마우스 입력, 타이머 이벤트를 관리하는 기능이 없습니다.
  • 이 불편함을 해결해주기 위해 만들어진 것이 GLUT입니다.

핵심 역할 요약

기능설명
윈도우 생성 및 관리 윈도우 생성, 크기 설정, 닫기 이벤트 처리
입력 이벤트 처리 키보드 입력, 마우스 클릭, 마우스 이동
렌더링 루프 관리 화면 갱신을 위한 main loop
기본적인 메뉴 기능 마우스 우클릭 메뉴 생성 가능

GLUT의 기본 구조

GLUT를 사용하는 프로그램은 딱 4단계 구조를 가집니다.

  1. 초기화
  2. 윈도우 생성
  3. 콜백 함수 등록 (Display, Keyboard, Mouse 등)
  4. 메인 루프 진입 (glutMainLoop)

 

기본 형태

#include <GL/glut.h>

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_TRIANGLES);
    glVertex2f(0.0, 1.0);
    glVertex2f(-1.0, -1.0);
    glVertex2f(1.0, -1.0);
    glEnd();
    glFlush();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);                      // 1. GLUT 초기화
    glutCreateWindow("Simple GLUT Example");    // 2. 윈도우 생성
    glutDisplayFunc(display);                   // 3. 디스플레이 콜백 등록
    glutMainLoop();                              // 4. 메인 루프
    return 0;
}

 

주요 함수 설명

함수설명
glutInit GLUT 시스템 초기화 (argc, argv 필요)
glutInitDisplayMode 렌더링 모드 설정 (예: 더블버퍼링, 깊이 버퍼 등)
glutInitWindowSize, glutInitWindowPosition 윈도우 초기 크기와 위치 지정
glutCreateWindow OpenGL 윈도우 생성
glutDisplayFunc 화면 그리기 함수 등록
glutKeyboardFunc 키보드 입력 콜백 등록
glutMouseFunc 마우스 버튼 이벤트 콜백 등록
glutMotionFunc 마우스 이동 이벤트 콜백 등록
glutIdleFunc 프로그램이 놀고 있을 때 호출될 함수 등록 (ex. 애니메이션)
glutMainLoop 이벤트 루프 진입 (빠져나올 수 없음)

GLUT의 특징 (장점/단점)

장점

  • 코드가 매우 간결하다 (OpenGL 시작을 쉽게 해준다)
  • 운영체제 종속성이 거의 없다 (Windows, Linux, macOS 모두 지원)
  • 학습용/데모용으로 아주 적합하다

단점

  • 기능이 매우 제한적이다 (윈도우나 입력 처리가 고급 수준이 아님)
  • 메인 루프를 빠져나올 수 없다 (glutMainLoop를 호출하면 프로그램 흐름이 거기서 멈춤)
  • 옛날 스타일이라 현대식 OpenGL (3.x, 4.x 코어 프로파일)과는 잘 맞지 않는 경우가 있다
  • 유지보수가 사실상 중단 (그래서 후속으로 나온 것이 FreeGLUT)

FreeGLUT란?

  • GLUT의 오픈소스 대체 버전입니다.
  • GLUT의 문제점(메인루프 빠져나올 수 없는 문제 등)을 개선했습니다.
  • 요즘에는 대부분 "GLUT = FreeGLUT"이라고 생각해도 됩니다.

추가 기능 예시:

  • glutMainLoopEvent() : 메인 루프를 유연하게 처리 가능
  • 윈도우 여러 개 생성/관리 지원

 

728x90
반응형
사업자 정보 표시
사업자 등록번호 : -- | TEL : --

'교육 관련 > C++' 카테고리의 다른 글

Template Matching 알고리즘 - 성능 향상 버전  (0) 2025.04.10
C++ 정적/상수 멤버  (0) 2022.05.02
C++ 프렌드  (0) 2022.04.19
C++ 오버로딩/오버라이딩  (0) 2022.04.16
C++ 소멸자  (0) 2022.04.01