OpenGL과 OpenGL 라이브러리 개념 정리
OpenGL은 그래픽스 API로, 2D, 3D 그래픽스를 렌더링하는 데 사용된다. 근본적으로는 그래픽 드라이버와 상호작용하여 화면에 표시할 픽셀 정보를 담고 있는 프레임버퍼에 렌더링할 값을 읽고 쓰는 기능을 수행한다.
참고로, 하드웨어적으로 모든 렌더링은 GPU가 수행한다. CPU는 GPU에 렌더링을 요청하는 Client가 되고, GPU는 Server로서 요청을 받아들여 렌더링을 수행한 후 디스플레이에 출력한다.
OpenGL은 크로스 플랫폼이며, C, C++, Java, Python 등 다양한 언어로 사용할 수 있다.
배리에이션으로는 Android, iOS 등 저전력 임베디드 시스템을 위한 OpenGL ES, 웹 브라우저 환경에서 JavaScript로 OpenGL ES를 구현한 WebGL 등이 있다.
OpenGL 4.6 버전이 나온 이후, 현재는 OpenGL 대신 Vulkan API가 주로 사용되는 추세이다.
OpenGL의 구성 요소
-
States
-
global parameter들의 Snapshot
-
GL context
-
-
Primitives
- Vertex(꼭짓점)들의 집합
-
Commands
- 그래픽스 함수들의 실행 (Execution of graphics functions)
OpenGL 라이브러리
OpenGL은 렌더링을 위한 비교적 Low-level의 API이기 때문에, 유저가 쉽게 C++ 등의 언어로 OpenGL 어플리케이션 프로그램을 작성하기 위해서는 OpenGL을 지원하는 라이브러리가 필요하다.
하술할 라이브러리들은 모두 유저가 작성하는 OpenGL 어플리케이션의 소스 코드에 include되어 사용된다.
GLUT (OpenGL Utility Toolkit)
Platform-indepedent한 윈도우 관리 라이브러리이다. 즉 GLUT을 사용하면 OS마다 다른 윈도우 API를 호출할 필요가 없다. GL 윈도우를 생성하고, 마우스, 키보드 등의 이벤트를 처리하고, 간단한 GUI 인터페이스를 만드는 기능을 제공한다.
GLUT의 오픈 소스 버전인 freeglut은 기존 GLUT에 추가 기능을 제공한다고 한다.
GLUT은 event-driven으로, 스크린, 키보드, 마우스 관련 이벤트가 발생하면 callback 함수가 호출되는 방식이다.
GLEW (OpenGL Extension Wrangler Library)
GLEW는 특정 시스템에서 이용 가능한 OpenGL의 확장 기능에 쉽게 접근할 수 있도록 한다.
Windows 코드에서 특정 엔트리 포인트를 지정할 필요가 없다고 한다.
glew.h
를 소스 코드에 include하고 glewInit()
을 호출하는 것으로 간단히 사용 가능하다고 한다.
이곳에서 다운로드 가능하다.
다운로드 후 glewinfo.exe
파일을 실행하면 현재 시스템에서 지원하는 OpenGL의 확장 기능을 확인할 수 있다.
참고 문헌
- COSE436 ppt slides, Won Ki Jeong(wkjeong@korea.ac.kr)