일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Contour
- inheritance
- wpf
- mfc
- aduino
- Unity
- preprocessing
- digitalRead
- Android
- atmega328
- SERIAL
- Pointer
- public
- Read
- c++
- java
- file access
- Class
- Encapusulation
- flutter
- memory
- 3D
- Barcode
- UNO
- APP
- compare
- stream
- length
- sensor
- parameter
Archives
- Today
- Total
폴크(FOLC)
OpenGL 툴킷 라이브러리 - GLUT 본문
728x90
반응형
GLUT란 무엇인가?
GLUT는 OpenGL 프로그램을 쉽게 작성할 수 있도록 도와주는 툴킷 라이브러리입니다.
- "OpenGL은 3D 그래픽스 그리기만 담당"합니다.
- 그런데 OpenGL 자체는 윈도우 생성이나 키보드, 마우스 입력, 타이머 이벤트를 관리하는 기능이 없습니다.
- 이 불편함을 해결해주기 위해 만들어진 것이 GLUT입니다.
핵심 역할 요약
기능설명
윈도우 생성 및 관리 | 윈도우 생성, 크기 설정, 닫기 이벤트 처리 |
입력 이벤트 처리 | 키보드 입력, 마우스 클릭, 마우스 이동 |
렌더링 루프 관리 | 화면 갱신을 위한 main loop |
기본적인 메뉴 기능 | 마우스 우클릭 메뉴 생성 가능 |
GLUT의 기본 구조
GLUT를 사용하는 프로그램은 딱 4단계 구조를 가집니다.
- 초기화
- 윈도우 생성
- 콜백 함수 등록 (Display, Keyboard, Mouse 등)
- 메인 루프 진입 (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 |