'''오픈 그래픽 라이브러리'''( 줄여서 '''OpenGL''')은 1992년 실리콘 그래픽스사에서 만든 2차원 3차원 그래픽스 표준 API 규격으로, 프로그래밍 언어 플랫폼 간의 교차 응용 프로그래밍을 지원한다. API는 250여개 가량의 함수 호출을 이용하여 단순한 기하도형에서부터 복잡한 삼차원 장면을 생성할 있다. OpenGL은 현재 CAD, 가상현실, 정보시각화, 비행 시뮬레이션 등의 분야에서 활용되고 있다. 또한 컴퓨터 게임 분야에서도 널리 활용되고 있으며, 마이크로소프트사의 Direct3D와 함께 컴퓨터 그래픽 세계를 양분하고 있다. Direct3D와는 달리, 표준안이 여러 관련 업체의 토론과 제안으로 이루어지기에 버전 업데이트는 느린 편이다. OpenGL을 사용하여 개발된 대표적인 게임은 이드 소프트웨어의 퀘이크, 둠3 시리즈이다. 현재 비영리 기술 컨소시엄인 크로노스 그룹에 의하여 관리되고 있다. == 역사 == 1980년대에 다양한 그래픽 하드웨어와 기능할 있는 소프트웨어를 개발하는 일은 도전이었다. 소프트웨어 개발자들은 개별 하드웨어에 맞추어 맞춤식 인터페이스와 드라이버를 작성하였다. 이러한 일은 비용이 많이 들었고 노력이 크게 늘어나게 되었다. 1990년대 초, 실리콘 그래픽스(SGI)는 워크스테이션용 3차원 그래픽스의 리더였다. IRIS GL API는 사실 상의 표준 산업이 되어 오픈 표준 기반의 PHIGS를 무색케 했다. IRIS GL이 사용하기 쉬운 것으로 간주되었을 아니라, 즉시 모드 렌더링을 지원하였기 때문이다. 이와 대조적으로, PHIGS는 사용하기 어렵고 기능이 시대에 뒤쳐진 것으로 간주되었다. SGI의 경쟁사들(썬 마이크로시스템즈, 휴렛 패커드, IBM)은 PHIGS 표준의 확장을 지원하는 3차원 하드웨어를 마케팅할 있었다. 많은 3차원 그래픽스 제공자들이 시장에 진입하면서 SGI 시장 점유율을 약화시켰다. 시장에 영향을 주려는 노력으로 SGI는 IrisGL API를 오픈 표준으로 전환시키기로 결정하였는데, 이것이 OpenGL이다. == 버전 역사 == OpenGL의 최초 버전은 1992년 6월 30일 Mark Segal and Kurt Akeley에 의해 출시되었다. 이후로 새로운 버전의 사양을 출시함으로써 OpenGL은 확장되어왔다. === 개요 === OpenGL 1.1 OpenGL 1.2 OpenGL 1.3 OpenGL 1.4 OpenGL 1.5 OpenGL 2.0 GLSL 1.1 OpenGL 2.1 GLSL 1.2 OpenGL 3.0 GLSL 1.3 OpenGL 3.1 GLSL 1.4 OpenGL 3.2 GLSL 1.5 OpenGL 3.3 GLSL 3.30 OpenGL 4.0 GLSL 4.00 OpenGL 4.1 GLSL 4.10 OpenGL 4.2 GLSL 4.20 OpenGL 4.3 GLSL 4.30 OpenGL 4.4 GLSL 4.40 OpenGL 4.5 GLSL 4.50 OpenGL 4.6 GLSL 4.60 === OpenGL 1.1 === 출시일: 1997년 3월 4일 Extension Name Sort #Number Extension #3 EXT_texture Extension #4 EXT_subtexture Extension #9 Extension #10 Extension #20 Extension #30 Extension #39 === OpenGL 1.2 === 출시일: 1998년 3월 16일 Extension Name Sort #Number EXT_texture3D Extension #6 Extension #23 Extension #24 Extension #27 Extension #35 Extension #112 EXT_bgra Extension #129 Extension #144 ==== OpenGL 1.2.1 ==== 출시일: 1998년 10월 14일 === OpenGL 1.3 === 출시일: 2001년 8월 14일 Extension Name Sort #Number in OpenGL 1.2.1 integrated ARB Extension #3 ARB_multisample ARB Extension #5 ARB Extension #7 ARB Extension #6 ARB Extension #17 ARB Extension #19 ARB Extension #12 ARB Extension #13 === OpenGL 1.4 === 출시일: 2002년 7월 24일 Extension Name Sort #Number Extension 32 EXT_blend_color Extension #2 Extension #38 OpenGL Extension #37 Extension #145 Extension #148 EXT_fog_coord Extension #149 Extension #173 Extension #176 OpenGL Extension #186 NV_blend_square Extension 194 ARB Extension #14 ARB Extension #18 ARB Extension #21 ARB_shadow ARB Extension #22 ARB Extension #23 ARB_window_pos ARB Extension #25 ARB Extension #26 === OpenGL 1.5 === 출시일: 2003년 7월 29일 Extension Name Sort #Number ARB Extension #28 ARB Extension #29 Extension #267 === OpenGL 2.0 === 출시일: 2004년 9월 7일 Extension Name Sort #Number ARB Extension #30 ARB Extension #31 ARB Extension #32 ARB Extension #33 ARB Extension #34 ARB Extension #35 ARB Extension #37 Extension #268 Extension #289 Extension #299 === OpenGL 2.1 === 출시일: 2006년 7월 2일 Extension Name Sort #Number ARB Extension #42 Extension #315 === OpenGL 3.0 === 출시일: 2008년 8월 11일 Extension Details EXT_gpu_shader4 Extension #326 ARB Extension #39 ARB Extension #40 ARB Extension #41 ARB Extension #43 ARB Extension #45 ARB Extension #48 ARB Extension #50 ARB_texture_rg ARB Extension #53 ARB Extension #54 ARB Extension #56 ARB Extension #75 ARB Extension #45 NV_half_float Extension #283 Extension #310 Extension #312 Extension #316, #317 Extension #328 Extension #329 OpenGL Extension #332 Extension #333 Extension #334 Extension #337 Extension #340 Extension #343 OpenGL Extension #346 Extension #352 === OpenGL 3.1 === 출시일: 2009년 3월 24일 Details ARB Extension #38 ARB Extension #44 ARB Extension #51 ARB Extension #57 ARB_copy_buffer ARB Extension #59 Extension Number 285 Extension Number 365 === OpenGL 3.2 === 출시일: 2009년 8월 3일 Extension Details (heavily modified) ARB Extension #47 (NVIDIA Revision: 26) ARB_depth_clamp ARB Extension #61 ARB Extension #62 ARB Extension #63 ARB Extension #64 ARB Extension #65 ARB_sync ARB Extension #66 ARB Extension #67 ARB Extension #68 === OpenGL 3.3 === 출시일: 2010년 3월 11일 Extension Details ARB Extension #49 ARB Extension #78 ARB Extension #79 ARB Extension #80 ARB Extension #81 ARB Extension #82 ARB Extension #83 ARB Extension #84 ARB_timer_query ARB Extension #85 ARB Extension #86 === OpenGL 4.0 === 출시일: 2010년 3월 11일 Extension Details ARB Extension #69 ARB Extension #70 ARB Extension #71 ARB Extension #72 ARB Extension #73 ARB Extension #87 ARB_gpu_shader5 ARB Extension #88 ARB Extension #89 ARB Extension #90 ARB Extension #91 ARB Extension #92 ARB Extension #93 ARB Extension #94 === OpenGL 4.1 === 출시일: 2010년 7월 26일 Extension Details ARB Extension #95 ARB Extension #96 ARB Extension #97 ARB Extension #98 ARB Extension #99 ARB Extension #100 === OpenGL 4.2 === ''출시일:'' 2011년 8월 8일 Extension Details ARB Extension #77 ARB Extension #110 ARB Extension #114 ARB Extension #117 ARB Extension #109 ARB Extension #107 ARB Extension #115 ARB Extension #111 ARB Extension #108 ARB Extension #112 ARB Extension #113 ARB Extension #116 === OpenGL 4.3 === ''출시일:'' 2012년 8월 6일 Extension Details KHR_debug ARB Extension #119 ARB Extension #120 ARB Extension #121 ARB Extension #122 ARB_copy_image ARB Extension #123 ARB Extension #124 ARB Extension #125 ARB Extension #127 ARB Extension #128 ARB Extension #129 ARB Extension #130 ARB Extension #131 ARB Extension #132 ARB Extension #133 ARB Extension #134 ARB Extension #135 ARB Extension #136 ARB Extension #137 ARB Extension #138 ARB Extension #139 ARB Extension #140 ARB Extension #141 === OpenGL 4.4 === ''출시일:'' 2013년 7월 22일 Extension Details ARB Extension #144 ARB Extension #145 ARB Extension #146 ARB_multi_bind ARB Extension #147 ARB Extension #148 ARB Extension #149 ARB Extension #150 ARB Extension #151 === OpenGL 4.5 === ''출시일:'' 2014년 8월 11일 Extension Details ARB Extension #159 ARB Extension #160, ARB Extension #161 ARB Extension #162 ARB Extension #163 ARB Extension #164 ARB Extension #165 ARB Extension #166 ARB Extension #167 ARB Extension #168 KHR_robustness ARB Extension #170 OpenGL Extension #437 === OpenGL 4.6 === ''출시일:'' 2017년 7월 31일 Extension Details ARB Extension #154, ARB Extension #156, ARB Extension #157 ARB Extension #171 ARB Extension #173 KHR_no_error ARB Extension #175 ARB Extension #182 ARB_gl_spirv ARB Extension #190 ARB Extension #193 ARB Extension #194 ARB Extension #195 == 설계 == 그래픽 파이프라인 공정 OpenGL은 가지의 주된 용도를 제공한다: 프로그래머에게 단일한 API를 제공함으로써 서로 다른 3차원 가속기 사이의 복잡한 상호 정보교환 방식을 간단하게 한다. (필요하다면 소프트웨어적인 에뮬레이션을 이용하더라도) 모든 구현이 완전한 OpenGL 기능 집합을 지원하도록 강제함으로써 각각의 하드웨어 플랫폼마다 다른 능력 차이를 감추는 역할을 한다. OpenGL의 동작은 점, 선, 다각형과 같은 기본 도형을 그리고, 이를 픽셀 형식으로 변환하는 것을 허용하고 있다. 이러한 일은 OpenGL 상태 머신(OpenGL State Machine)이라는 그래픽스 파이프라인을 통하여 이루어진다. == 예제 == glClear( ); 문장은 색상 버퍼를 소거하여 화면을 빈화면으로 만든다. glMatrixMode( GL_PROJECTION ); /* 뒤이어 나타나는 행렬 명령이 투영행렬에 영향을 */ /* 투영행렬을 단위 행렬로 초기화 */ glFrustum( -1, 1, -1, 1, 1, 1000 ); /* 투시투영행렬을 적용시킴 */ 문장은 투영행렬을 초기화한 후, 가시 영역을 표현하는 행렬로 삼차원 절두체 행렬을 사용한다는 명령이다. 행렬은 카메라에 상대적인 공간에서 표현되는 객체를 OpenGL의 투영 공간으로 변환시키는 일을 한다. glMatrixMode( GL_MODELVIEW ); /* 뒤이어 나타나는 행렬 명령이 모델뷰행렬에 영향을 */ /* 모델뷰행렬을 단위행렬로 초기화 */ glTranslatef( 0, 0, -3 ); /* 축으로 단위만큼 모델뷰를 평행이동시킴 */ 문장은 모델뷰 행렬을 단위행렬로 초기화시킨다. 행렬은 모델에 상대적인 좌표로부터 카메라 공간으로의 변환을 정의하는 행렬이다. glBegin( GL_POLYGON ); /* 다각형을 만든다 */ glColor3f( 0, 1, ); /* 현재 색상을 녹색으로 설정한다 */ glVertex3f( -1, -1, ); /* 다각형에 필요한 정점을 만든다 */ glVertex3f( -1, 1, ); /* 다각형에 필요한 정점을 만든다 */ glVertex3f( 1, 1, ); /* 다각형에 필요한 정점을 만든다 */ glVertex3f( 1, -1, ); /* 다각형에 필요한 정점을 만든다 */ 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 원격지 서버로 렌더링된 이미지를 보내주는 OpenGL 3D 모델 서버. Direct3D 마이크로소프트사에서 개발한 OpenGL의 대항 API. RISpec 픽사에서 개발한 실사 오프라인 렌더링을 위한 공개 API. === 기타 2D 그래픽스 API === 카이로 여러 운영체제에서 사용할 있는 벡터 그래픽 툴킷. GTK+ 여러 운영체제에서 사용할 있는 그래픽 위젯 툴킷. Qt 여러 운영체제에서 사용할 있는 그래픽 위젯 툴킷. wxWidgets 여러 운영체제에서 사용할 있는 그래픽 위젯 툴킷. == 벌컨 == 과거 이름이 "Next Generation OpenGL 벌칸(Vulkan)은 OpenGL과 OpenGL ES를 기존 OpenGL 버전들과 하위 호환되지 않는 하나의 공통된 API로 통합하려는 재설계적 일환이다. 벌컨 API의 최초 버전은 2016년 2월 16일에 출시되었다. == 각주 == == 외부 링크 == 공식 사이트 Neon Helium OpenGL 설명서, 약칭 NeHe. CodeSampler.com OpenGL 게임 프로그래밍 코드 예제 설명서. OpenGL 디렉터리 OpenGL를 위한 자원과 링크의 비교 표준 OpenGL 광원의 해석 Blender OpenGL을 이용한 오픈소스 3D 모델링 소프트웨어. 분류:그래픽 라이브러리 분류:3차원 그래픽스 API 분류:API 분류:1992년 소프트웨어