OpenGL 유틸리티 툴킷
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
OpenGL 유틸리티 툴킷(GLUT)은 마크 킬가드가 개발한 OpenGL 렌더링을 위한 라이브러리이다. X 윈도 시스템을 시작으로 여러 운영체제에서 사용되었으며, 윈도우 관리, 이벤트 처리, 기본 도형 생성, 팝업 메뉴 등의 기능을 제공한다. GLUT는 애플리케이션 프레임워크적인 기능도 갖추어 그래픽스 프로그램 프로토타이핑이나 입문서에서 널리 사용되었으나, 이벤트 루프 제어의 어려움, 프로세스 종료 문제, 구식 입력 장치 미지원 등의 한계로 인해 FreeGLUT와 같은 대체 라이브러리가 개발되었다. 또한, OpenGL의 발전으로 인해 최신 OpenGL 기능을 사용하기에 불편함이 있어 GLFW와 같은 새로운 툴킷으로 대체되고 있다.
더 읽어볼만한 페이지
- 그래픽 라이브러리 - Direct2D
Direct2D는 마이크로소프트에서 개발한 2D 그래픽 API로, 낮은 수준의 추상화, 고품질 텍스트 렌더링, 안티앨리어싱, 하드웨어 가속, 높은 DPI 지원 등의 특징을 가지며 다양한 분야에서 활용된다. - 그래픽 라이브러리 - WinG
WinG는 윈도우 3.x의 그래픽 성능 향상을 위해 개발된 기술로, DirectX로 발전하는 기반이 되었으며 한국 게임 산업에도 영향을 미쳤다. - 3차원 컴퓨터 그래픽스 - 픽셀 셰이더
픽셀 셰이더는 렌더링 과정에서 픽셀의 색상을 계산하여 최종 모습을 결정하며, 텍스처, 빛, 그림자 등의 시각 효과를 구현하고, 다양한 언어로 프로그래밍되며, 그래픽 카드 및 칩셋은 지원하는 버전을 가진다. - 3차원 컴퓨터 그래픽스 - 모션 캡처
모션 캡처는 물체의 움직임을 디지털 데이터로 변환하는 기술로서, CG 영상 제작에 활용되며, 센서 부착 방식에서 마커리스 방식으로 발전하여 다양한 분야에 응용된다.
OpenGL 유틸리티 툴킷 - [IT 관련 정보]에 관한 문서 | |
---|---|
OpenGL 유틸리티 툴킷 정보 | |
이름 | OpenGL 유틸리티 툴킷 |
원어 이름 | OpenGL Utility Toolkit |
약칭 | GLUT |
개발자 | Mark Kilgard(Silicon Graphics) |
최신 버전 | 3.7 |
최신 버전 출시일 | 1998년 5월 7일 |
프로그래밍 언어 | C/C++ |
운영 체제 | 크로스 플랫폼 ( Windows, macOS, Linux) |
종류 | API |
라이선스 | 라이선스 정보 없음 (정보 부족) |
웹사이트 | OpenGL Utility Toolkit 공식 웹사이트 |
2. 구현
마크 킬가드가 X 윈도 시스템(GLX)을 지원하기 위해 GLUT 라이브러리를 처음 개발했고, 네이트 로빈스가 마이크로소프트 윈도우(WGL)로 이식했다. macOS는 자체 NSGL/CGL을 지원하는 GLUT 프레임워크를 제공한다.[1]
2. 1. 오픈 소스 구현
마크 킬가드가 개발한 GLUT 라이브러리는 더 이상 유지보수되지 않으며, 해당 라이선스는 수정된 버전의 재배포를 허용하지 않았다.[1] 이는 API를 처음부터 다시 구현하는 자유 소프트웨어 또는 오픈 소스의 필요성을 촉진했다. 이러한 최초의 라이브러리는 FreeGLUT로, GLUT의 제한 사항을 다루기 위해 소수의 새로운 기능을 도입했지만, 합리적으로 근접한 복제를 목표로 했다. FreeGLUT의 포크인 OpenGLUT는 원래 API에 많은 새로운 기능을 추가했지만, 2005년 5월에 개발이 중단되었다.[2]3. 기능 (일본어 위키백과 참고)
마크 킬가드가 개발한 GLUT 라이브러리는 X 윈도 시스템(GLX)을 지원했으며, 네이트 로빈스에 의해 마이크로소프트 윈도우(WGL)로 이식되었다. 또한, macOS는 자체 NSGL/CGL을 지원하는 GLUT 프레임워크를 제공한다.
킬가드의 GLUT 라이브러리는 더 이상 유지보수되지 않으며, 해당 라이선스는 수정된 버전의 재배포를 허용하지 않았다. 이 때문에 FreeGLUT와 같이 GLUT의 제한 사항을 해결하면서도 API를 거의 그대로 구현한 자유 소프트웨어 또는 오픈 소스 라이브러리가 등장했다. FreeGLUT의 포크인 OpenGLUT는 원래 API에 많은 새로운 기능을 추가했지만, 2005년 5월에 개발이 중단되었다.
OpenGL을 위한 기본적인 확장 라이브러리로는, 동차 변환 행렬 생성 등을 보조하는 OpenGL Utility Library영어 (GLU)가 있지만, GLUT는 GLU에 없는 다음과 같은 기능들을 가지고 있다.
GLUT는 소스 코드가 공식 사이트에서 공개되어 있다. 퍼블릭 도메인은 아니며, 또한 무보증이지만, 라이선스료를 지불하지 않고 무상으로 이용할 수 있다.[5] Microsoft Windows SDK에는 GLU가 동봉되어 있지만, GLUT는 동봉되어 있지 않다. Xcode에는 `GLUT.framework`가 동봉되어 있지만,[6] OpenGL과 함께 더 이상 권장되지 않는다.
한편, 과거에는 Microsoft DirectX (Direct3D) 용 GLUT 스타일 프레임워크 라이브러리 "DXUT"가 소스 코드와 함께 DirectX SDK에 동봉되어 있었다.[7][8] DXUT는 C++ 전용이며, Direct3D 9/10/11에 대응하며, GLUT와 같은 콜백 형식의 프레임워크에 더하여, 버튼이나 드롭다운 리스트 등의 GUI 부품도 독자적으로 지원했다. DXUT는 주로 DirectX의 샘플 코드나 기술적인 데먼스트레이션을 위해 마련된 것이며, 실제 애플리케이션 소프트웨어 개발용은 아니다.
3. 1. 윈도우 관리
GLUT는 단순한 유틸리티를 넘어 애플리케이션 프레임워크적인 기능도 가지고 있다. 특히 OpenGL의 렌더링 컨텍스트를 생성하여 윈도우에 연결하는 처리와 이벤트 루프 처리는 운영 체제 및 윈도우 시스템마다 다르며, OpenGL API를 사용하여 그린 그래픽스를 실제로 화면에 표시하고 상호 작용을 할 수 있게 되기까지는 정형적인 초기화 처리를 상당량 작성해야 한다. 이는 초보자에게는 난해하고 숙련자에게도 번거로운 작업이다. 따라서 GLUT는 OpenGL의 보조 라이브러리 중에서도 특히 널리 사용되며, 그래픽스 프로그램의 프로토타이핑이나 입문서 등에서도 사용된다.[4]GLUT가 제공하는 윈도우 관리 기능은 다음과 같다.
- OpenGL 렌더링을 위한 복수 윈도우
- 콜백 형식의 이벤트 처리
- 마우스나 키보드 등 기본 입력 장치 지원
- 아이들링과 타이머
- 단순한 팝업 메뉴
- 기타 윈도우 관리 함수
3. 2. 이벤트 처리
GLUT는 다음과 같은 기능을 제공한다.- 콜백 형식의 이벤트 처리
- 마우스나 키보드 등 기본 입력 장치 지원
- 아이들링과 타이머
- 기타 윈도우 관리 함수
GLUT는 애플리케이션 프레임워크적인 기능도 함께 가지고 있어, 플랫폼 고유의 윈도우 위젯 생성 처리 등을 단순화하고 자동화한다. 특히 OpenGL의 렌더링 컨텍스트를 생성하여 윈도우에 연결하는 처리와 이벤트 루프 처리는 운영 체제 및 윈도우 시스템마다 다르다. OpenGL API를 사용하여 그린 그래픽스를 실제로 화면에 표시하고 상호 작용을 할 수 있게 하려면 상당량의 초기화 처리를 작성해야 하는데, 이는 초보자에게는 어렵고 숙련자에게도 번거롭다.[4]
3. 3. 기본 도형 생성
GLUT는 구, 입방체, 원뿔, 토러스, 티포트 등 기본적인 3D 도형을 생성하는 함수를 제공하여, 간단한 와이어프레임 또는 솔리드 형태의 그래픽스 구현을 돕는다.[4]4. 한계 (영어 위키백과 참고)
마크 킬가드가 개발한 GLUT 라이브러리의 초기 설계는 몇 가지 제약 사항을 가지고 있어 프로그래머가 원하는 작업을 수행하는 데 어려움을 겪을 수 있었다. 이로 인해 많은 비표준 패치 및 확장이 만들어졌으며, 일부 자유 소프트웨어 또는 오픈 소스 소프트웨어 재구현에도 이러한 수정 사항이 포함되었다.[1]
원래 GLUT 라이브러리는 다음과 같은 한계점을 가지고 있었다.
- `glutMainLoop()` 함수 호출 강제: 이 함수는 반환되지 않아 자체 이벤트 루프를 제어하기 어렵게 만들었다.
- `glutMainLoop()` 미반환: 이벤트 루프를 종료할 수 없었다.
- 창 닫힘 시 프로세스 종료: 일부 응용 프로그램에서 원치 않는 동작을 유발했다.
이러한 문제점들로 인해, FreeGLUT과 같은 오픈 소스 대체 라이브러리가 등장하게 되었다.
4. 1. 이벤트 루프 제어 문제
GLUT의 원래 설계는 프로그래머가 원하는 작업을 수행하기 어렵게 만들었으며, 이로 인해 많은 비표준 패치 및 확장이 만들어졌다. 자유 소프트웨어나 오픈 소스 소프트웨어 재구현에도 이러한 수정 사항이 포함되었다.원래 GLUT 라이브러리의 주목할 만한 제한 사항은 다음과 같다.
- 라이브러리는 프로그래머가 `glutMainLoop()`를 호출하도록 요구하는데, 이 함수는 반환되지 않는다. 따라서 프로그래머가 자체 이벤트 루프를 제어하려는 프로그램이나 라이브러리에 GLUT를 통합하기가 어렵다. 이를 해결하기 위한 일반적인 방법은 GLUT 이벤트 루프의 한 번의 반복만 실행하는 `glutCheckLoop()` (macOS) 또는 `glutMainLoopEvent()` (FreeGLUT/OpenGLUT)라는 새 함수를 도입하는 것이다. 또 다른 해결책은 GLUT의 이벤트 루프를 별도의 스레드에서 실행하는 것이지만, 운영 체제에 따라 다를 수 있으며, 동기화 문제 등을 일으킬 수 있다. 예를 들어 macOS GLUT 구현은 `glutMainLoop()`가 메인 스레드에서 실행되도록 요구한다.
- `glutMainLoop()`가 반환되지 않기 때문에 GLUT 프로그램은 이벤트 루프를 종료할 수 없다. FreeGLUT는 `glutLeaveMainLoop()` 함수를 도입하여 이 문제를 해결한다.
- 라이브러리는 창이 닫힐 때 프로세스를 종료한다. 일부 응용 프로그램에서는 이것이 바람직하지 않을 수 있다. 따라서 많은 구현에는 `glutWMCloseFunc()`와 같은 추가 콜백이 포함된다.
더 이상 유지 관리되지 않으므로 (사실상 오픈 소스 소프트웨어인 FreeGLUT로 대체됨) 위의 설계 문제는 원래 GLUT에서 여전히 해결되지 않았다.
GLUT는 메인 루프(이벤트 루프)에 진입한 후, 종료 시 윈도우를 닫을 때 메인 루프에서 빠져나올 수 있는 수단이 없어서 C의 `exit()` 함수를 사용하는 등 반 강제 종료를 해야만 했다.
4. 2. 프로세스 종료 문제
GLUT는 창이 닫힐 때 프로세스를 종료하는 방식으로 동작하는데, 이는 일부 응용 프로그램에서 바람직하지 않을 수 있다. 따라서 많은 구현에서 `glutWMCloseFunc()`와 같은 추가 콜백을 포함한다.[9] GLUT는 메인 루프(이벤트 루프)에 진입한 후, 종료 시 윈도우를 닫을 때 메인 루프에서 빠져나올 수 있는 수단이 없어서 C의 `exit()` 함수를 사용하는 등 반 강제 종료를 해야만 한다.4. 3. 기타 문제점 (일본어 위키백과 참고)
GLUT는 마우스 휠 등의 최신 입력 장치를 지원하지 않는다.[9] 1998년에 출시된 GLUT의 최종 버전 3.7 이후, 그래픽스 하드웨어(온보드 그래픽스 또는 그래픽 카드에 탑재된 GPU)가 발전하였다. 이와 함께 OpenGL의 고정 기능(OpenGL 3.0에서 비권장, 3.1에서 확장 기능으로 강등, 3.2에서 호환 프로파일로 분리)에 의존하는 GLUT는 최신 OpenGL 기능을 사용하는 데 제약이 따르게 되었다.[9] GLUT는 OpenGL 렌더링 컨텍스트 생성을 숨기고 있어, 최신 OpenGL 방식과 호환되지 않을 수 있기 때문이다.5. 대체 라이브러리
마크 킬가드가 개발한 GLUT 라이브러리는 더 이상 유지보수되지 않고, 라이선스 문제로 인해 수정된 버전의 재배포가 허용되지 않았다.[1] 이러한 제약은 자유 소프트웨어 또는 오픈 소스 소프트웨어 형태의 대체 라이브러리 개발을 촉진했다.
초기에는 FreeGLUT가 GLUT의 기능을 거의 그대로 복제하면서 몇 가지 새로운 기능을 추가하여 널리 사용되었다.[2] FreeGLUT에서 포크된 OpenGLUT는 더 많은 기능을 추가했지만, 2005년 5월 개발이 중단되었다.
GLUT의 설계상 문제점과 유지보수 중단으로 인해, 다음과 같은 다양한 대체 라이브러리가 개발되었다.
- FreeGLUT: GLUT의 거의 완전한 오픈 소스 소프트웨어 구현체로, 몇 가지 추가 기능을 제공한다.
- GLFW: 렌더링 컨텍스트 생성 시 프로파일 종류를 지정할 수 있어 최신 OpenGL 기능을 사용하는 데 유리하다.
이 외에도 여러 비표준 패치 및 확장들이 GLUT의 한계를 극복하기 위해 만들어졌다.
6. 한국에서의 활용
대한민국에서는 GLUT가 OpenGL 교육 및 실습에 널리 사용된다. 특히, 대학교 컴퓨터 그래픽스 강의 및 관련 학과에서 GLUT를 활용한 프로그래밍 교육이 이루어진다. 또한, 간단한 프로토타입 제작이나 개인 프로젝트에도 GLUT가 활용된다.[4]
참조
[1]
웹사이트
Glut
https://github.com/m[...]
2021-11-21
[2]
웹사이트
Glut
https://github.com/m[...]
2021-11-21
[3]
문서
GLUT 3.7同梱のREADMEを参照のこと。
[4]
서적
GLUTによるOpenGL入門―「OpenGL Utility Toolkit」で簡単3Dプログラミング!
工学社
2005-05
[5]
문서
GLUT 3.7同梱のNOTICEを参照のこと。
[6]
웹사이트
OS X Frameworks - Mac Technology Overview
https://developer.ap[...]
[7]
웹사이트
DXUT プログラミング ガイド (DirectX SDK August 2008) | Microsoft Learn
https://learn.micros[...]
[8]
웹사이트
DXUT プログラミング ガイド (DirectX SDK August 2009) | Microsoft Learn
https://learn.micros[...]
[9]
웹사이트
床井研究室 - (1) GLFW で OpenGL を使う
http://marina.sys.wa[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com