2010. 1. 15. 10:30

OpenGL





OpenGL(Open Graphics Library, 오픈지엘)은 1992년 실리콘 그래픽스사에서 만든 2D 및 3D 그래픽 표준 API 사양으로, 프로그래밍 언어간 플랫폼 간의 교차 응용 프로그래밍을 지원한다. 이 API는 약 250여개 가량의 함수호출을 이용하여 단순한 기하도형에서부터 복잡한 삼차원 장면을 생성할 수 있다. OpenGL은 현재 CAD, 가상현실, 정보시각화, 비행 시뮬레이션등의 분야에서 활용되고 있다. 또한 컴퓨터 게임 분야에서도 널리 활용되고 있으며, 마이크로소프트사의 Direct3D와 함께 컴퓨터 그래픽 세계를 양분하고 있다. Direct3D와는 달리, 표준안이 여러 관련 업체의 토론과 제안으로 이루어지기에 버전 업데이트는 느린 편이다. OpenGL을 사용하여 개발된 대표적인 게임은 이드 소프트웨어퀘이크 둠3 시리즈이다. 현재 비영리 기술 컨소시움인 크로노스 그룹에 의하여 관리되고 있다.

설계 [편집]

OpenGL은 두가지의 주된 용도를 제공한다:

  • 프로그래머에게 단일한 API를 제공함으로서 서로 다른 3차원 가속기 사이의 복잡한 상호 정보교환 방식을 간단하게 한다.
  • (필요하다면 소프트웨어적인 에뮬레이션을 이용하더라도) 모든 구현이 완전한 OpenGL 기능 집합을 지원하도록 강제함으로서 각각의 하드웨어 플랫폼마다 다른 능력 차이를 감추는 역할을 한다.

OpenGL의 동작은 점, 선, 다각형과 같은 기본 도형을 그리고, 이를 픽셀 형식으로 변환하는 것을 허용하고 있다. 이러한 일은 OpenGL 상태 머신(OpenGL State Machine)이라는 그래픽스 파이프라인을 통하여 이루어진다.

예제 [편집]

glClear( GL_COLOR_BUFFER_BIT );
이 문장은 색상 버퍼를 소거하여 화면을 빈화면으로 만든다.
glMatrixMode( GL_PROJECTION );      /* 뒤이어 나타나는 행렬 명령이 투영행렬에 영향을 줌 */
glLoadIdentity();                   /* 투영행렬을 단위 행렬로 초기화 함 */
glFrustum( -1, 1, -1, 1, 1, 1000 ); /* 투시투영행렬을 적용 시킴 */
위 문장은 투영행렬을 초기화시킨 후, 가시 영역을 표현하는 행렬로 삼차원 절두체 행렬을 사용 한다는 명령이다. 이 행렬은 카메라에 상대적인 공간에서 표현되는 객체를 OpenGL의 투영 공간으로 변환시키는 일을 한다.
glMatrixMode( GL_MODELVIEW );       /* 뒤이어 나타나는 행렬 명령이 모델뷰행렬에 영향을 줌 */
glLoadIdentity();                   /* 모델뷰행렬을 단위행렬로 초기화 함 */
glTranslatef( 0, 0, -3 );           /* z 축으로 3 단위만큼 모델뷰를 평행이동시킴 */
위 문장은 모델뷰 행렬을 단위행렬로 초기화시킨다. 이 행렬은 모델에 상대적인 좌표로부터 카메라 공간으로의 변환을 정의하는 행렬이다.
glBegin( GL_POLYGON );              /* 다각형을 만든다 */
glColor3f( 0, 1, 0 );               /* 현재 색상을 녹색으로 설정한다 */
glVertex3f( -1, -1, 0 );            /* 다각형에 필요한 정점을 만든다 */
glVertex3f( -1, 1, 0 );             /* 다각형에 필요한 정점을 만든다 */
glVertex3f( 1, 1, 0 );              /* 다각형에 필요한 정점을 만든다 */
glVertex3f( 1, -1, 0 );             /* 다각형에 필요한 정점을 만든다 */
glEnd();                            /* 다각형 만드는 일을 종료시킨다 */
위의 명령은 XY 평면위에 녹색의 다각형을 그리는 일을 한다.

같이 보기 [편집]

  • GLSL - OpenGL의 상위 레벨 셰이딩 언어.
  • 글라이드 - 부두 그래픽 가속 카드를 위한 3D 그래픽스 API.
  • OpenGL ES - 임베디드 단말을 위한 OpenGL.

OpenGL 지원 라이브러리 [편집]

  • GLUT – OpenGL 유틸리티 툴킷으로 윈도우 시스템에 독립적인 OpenGL 프로그램을 작성하도록 도와주는 도구.
  • SDL – Simple DirectMedia Layer.
  • GLU – OpenGL 프로그램을 위한 추가적인 함수를 제공.
  • GLee - OpenGL 프로그램을 위한 단순한 추가 라이브러리 제공.
  • GLEW – OpenGL 확장 Wrangler 라이브러리 제공.
  • GLUI - GLUT로 만들어진 GUI 툴킷으로 버턴, 체크박스등의 GUI 기능을 제공.
  • GLFW - OpenGL 응용프로그램 개발을 위한 이식가능한 프레임워크.
  • GLM - GLSL 사양에 기반한 OpenGL을 위한 C++ 수학 툴킷.
  • SFML - 간단하고 빠른 멀티미다어 라이브러리.
  • Glux - OpenGL 유틸리티 및 보조 라이브러리.

기타 3D 그래픽스 API [편집]

  • Mesa 3D - OpenGL의 공개소스 판.
  • VirtualGL - 원격지 X 서버로 렌더링된 이미지를 보내주는 OpenGL 3D 모델 서버.
  • Direct3D - 마이크로소프트사에서 개발한 OpenGL의 대항 API.
  • RISpec - 픽사에서 개발한 실사 오프라인 렌더링을 위한 공개 API.

기타 2D 그래픽스 API [편집]

  • Cairo - 벡터 그래픽을 위한 교차 플랫폼 툴킷.
  • GTK+ - 교차 플랫폼으로 된 그래픽 위젯 툴킷.
  • QT - 교차 플랫폼으로 된 그래픽 위젯 툴킷.
  • wxWidgets - 교차 플랫폼으로 된 그래픽 위젯 툴킷.

출처 : http://ko.wikipedia.org/wiki/OpenGL