본문 바로가기

Fun,Fun,Fun

그래픽 프로그래밍 인터페이스 OpenGL(Open Graphics Library)

OpenGL(Open Graphics Library)



개발처 실리콘 그래픽스
종별 3D 그래픽 API
공식 사이트 http://www.opengl.org/

OpenGL ( 오픈지엘, Open Graphics Library )는 Khronos그룹이 개발하고있는 그래픽 하드웨어의 응용 프로그램 프로그래밍 인터페이스( API ) 이다. 2 차원 · 3 차원 컴퓨터 그래픽 모두 다룰 수있다. 원래는 실리콘 그래픽스( SGI )가 개발하고 있었다.


OpenGL은 SGI를 비롯해  HP, 썬 마이크로 시스템즈(현 오라클 ), IBM, SONY - NEWS등의 UNIX 워크 스테이션의 다른 Linux, FreeBSD등의 PC UNIX뿐만 아니라 Windows, Mac OS X등으로 사용할수있는 크로스 플랫폼 API이다. 또한 휴대폰, PDA( 휴대 정보 단말기 ), 가전등 임베디드 애플리케이션을위한 OpenGL 의 부분 집합 버전이다 OpenGL ES도 존재한다.


오픈 사양으로 공개된 다양한 처리계에 대응하고있기 때문에, 널리 일반에 보급 하고있다. 그래픽 장치와 직접 통신하는 추상화 계층 API이기 때문에 매우 빠르게 동작하고 정확한 3D 이미지를 렌더링 할 수있다. 유무상 풍부한 보조 라이브러리가있는 것도 특색으로 꼽힌다.
2004년에 발표된 OpenGL 2.0 쉐이딩 언어를 사양화하는등 시대에 따라 다양한 기능을 갖게 하고있다.




원래는 SGI가 자사 워크 스테이션에 사용 하고 있던 IRIS GL이라는 시스템을 개선 하고 이동성을 높인 것이 프로그램의 목적이었다. 


1992년 이후에는 OpenGL Architecture Review Board ( ARB )에 의해 감수하는 일이된다. 이 ARB 에는 3Dlabs, 애플, AMD (구 ATI ), 델, Evans & Sutherland, HP, IBM, 인텔, Matrox, NVIDIA, 실리콘 그래픽스, 썬 마이크로 시스템즈 (현 오라클 )이 참여 하고있다. 2006년 9월 21일 이후부터는 100개 이상의 기업 으로 구성된 표준화 단체 크로노스 그룹 ( The Khronos Group )으로 관리가 이행 되어, OpenGL ARB Working Group ( OpenGL ARB WG )이되었다.


오픈 사양이므로 각종 OS에 이식 또는 호환 GL이 만들어지고 또한 그래픽칩 벤더들은 오픈 소스 OS용 드라이버를 제공 하는등 범용성이 풍부한 라이브러리가 있다. 벤더 고유의 기능에도 유연하게 대응할 수 있기 때문에 재빨리 최신 보드 3D 그래픽의 최신 기술을 사용할 수있는 반면, 하드웨어를 한정한 범용성의 응용 프로그램도 범람하고 있다. OpenGL 표준화에 대한 대응은 다소 느린 경향이 있었지만, OpenGL 3.0 이상 사양의 갱신 빈도는 높아지고 있으며 DirectX11에 상응하는 기능을 가진 OpenGL 4.0의 출시도 4 개월 차이에 불과하는등 이 경향은 변화하고 있다.




특징
OpenGL 화면 ( 프레임 버퍼 )에 렌더링하는 것을 전제로 설계 되어있다. 3DCG을 그릴 수 있다고해도 오프라인 렌더러 ( POV - Ray 등 )과 같은 광선 추적법은 표준에서 지원되지 않고, 다각형등의 원시적 형태를 실시간으로 순서로 래스터화 ( 픽셀 화 )하여 합성하는 일로 3DCG를 그린다. 따라서 형상들이 반영 되는듯한 이상한 거울처럼 반사, 유리의 굴절, 프로젝션, 교차한 반투명 모양등을 표현 하려면 특수한 프로그래밍 이 필요하게된다.


유연한 이미지 처리를 위해, 정보를 기록하여  Z 버퍼등에 이용할 수있는 " 딥스 버퍼 ", 형상의 인덱스를 기록 하여 마스크 처리등을 실시 할 수있는 " 스텐실 버퍼 " 정확한 색상 합성등을 실시할수 있는 " 축적 버퍼 " 와 같은 특수 화소 정보를 지원 하고있다. 또한 원래 OpenGL및 GPU에서 고정적으로 처리 되어 왔던 정점 데이터 및 조각 ( 래스터화에 의해 생성되는 화소 )의 처리를 GPU의 강력한 처리 능력을 살리면서 프로그래밍 가능하게하는 프로그래머블 쉐이더의 등장과 그것을 통제하는 쉐이딩 언어 GLSL의 채용에 의해 더욱 다양한 표현이 가능하게 되었다.


또한 파티클 기능을 주목적으로 둔 포인트 스프라이트를 지원 하고있다. 일반적으로 입자와 2 차원 이미지 의 개체를 3차원 공간에 합성 하면 단조로운 다각형에 텍스처를 쳐, 항상 관점과 평행이되도록 조정 하는 '빌보드 '라는 기술이 사용되고 있지만 포인트 스프라이트를 사용함으로써 빌보드 대신 좌표 계산 및 프로그래밍 비용을 줄일 수있다.




보조 · 확장 라이브러리

OpenGL 자체는 하드웨어에 가까운 낮은 라이브러리 이다. 따라서 보다 소프트웨어에 가까운 많은 보조 · 확장 라이브러리가 존재한다. 주로 3D 렌더링 기능을 단순화하고 확장하는 것, 윈도우 시스템을 지원하는 그래픽면, 이외의 기능을 부가하는 것으로 나눌 수있다.


GLU - 카메라와공, ​​원통, 곡면 등의 처리를 보조
GLX - X Window System 에서 OpenGL을 사용하기 위한 라이브러리
WGL - Microsoft Windows 에서 OpenGL을 사용하기 위한 라이브러리
CGL , AGL , NSOpenGL ( Cocoa의 일부 ) - Mac OS X 에서 OpenGL을 사용하기 위한 라이브러리
GLUT - 크로스 플랫폼 OpenGL 대응 위젯 툴킷
FreeGLUT - GLUT 기능을 강화한 상위 호환성 라이브러리
GLUI - GLUT 를 기반으로 한 위젯 라이브러리
AUX - 위젯 툴킷, 그러나 오래 되어 GLUT의 사용이 권장 된다
GLEW - GLSL 등의 OpenGL 확장의 사용을 촉진 하는 라이브러리
PLIB - OpenGL을 이용한 게임 개발 라이브러리
OpenML
OpenGL ES - embedded system를위한 OpenGL의 부분 집합
OpenSceneGraph
FLTK - 크로스 플랫폼 OpenGL 대응 위젯 툴킷
Open Inventor




OpenGL의 단점
OpenGL 단체 에서는 Windows GDI 와 Cocoa같은 높은 레벨의 캐릭터 라인 드로잉 API 가 포함되어 있지 않기 때문에, 미리 캐릭터가 그려진 텍스처를 이용 하거나 플랫폼 의존의 높은 수준 API 와 연계할 필요가있다. 문자열 그리기 가 약점이지만, Direct2D와 DirectWrite 같은 복잡한 2D 그리기 및 텍스트 그리기에 특화 한 파생 API 도 정비되고 있다. 




OpenGL 1.5
2003 년에 발표 된 OpenGL 1.5에서는 확장으로 프로그래머블 셰이더 ( GLSL 1.0 ) 에 처음으로 대응 했다.


OpenGL 2.x
2004 년에 발표된 OpenGL 2.0 쉐이딩 언어 GLSL 버전 1.1 대응이 표준 사양으로 포함되었다.


OpenGL 3.x
2008 년에 발표된 OpenGL 3.0은 OpenGL API 세트 자체의 트레이닝을 목적으로 2.x 이전 세대를 대폭적인 업데이트를해 많은 기능이 비추천 · 폐지 예정 되었다. 다음 2009 년 3월에 발표된 OpenGL 3.1은 고정 기능 쉐이더가 표준 사양에서 제거되어 확장 취급 되었다. 또한 같은해 8 월에 발표된 OpenGL 3.2에서는 Direct3D 10에 도입된 지오메트리 쉐이더에 정식 대응했다. 고정 기능 쉐이더의 폐지나 지오메트리 셰이더 의 대응등은 Direct3D 10의 사양과 일치 하고있다.


OpenGL 4.x
2010년에 발표  OpenGL 4.0에서는 Direct3D 11의 셰이더, 테셀 레이터및 도메인 쉐이더에 해당하는 테셀레이션 제어 쉐이더, 테셀레이션 기본 생성기및 테셀레이션 평가 쉐이더가 탑재 되었다. 또한 2012년에 발표 된 OpenGL 4.3에서는 Direct3D 11의 컴퓨팅 쉐이더와 같은 GPGPU 용 연산 쉐이더가 추가 탑재 되었다. 지금까지 OpenGL 사양의 업데이트 속도는 Direct3D에 비해 매우 느렸지만, OpenGL 4는 동등 혹은 그 이상의 속도로 진화하고 있다.




DirectX 와의 관계

OpenGL은 3D 그래픽을 전문적으로 취급하는 라이브러리 이다. Microsoft DirectX는 게임 개발에서의 이용을 주된 용도로 취급하며, 그래픽 뿐만 아니라 사운드및 입력 관련 API를 포함하는 점에서 성격이 다르다. 또한 OpenGL과 직접 비교 되어야 하는 API는 DirectX 제품의 일부 그래픽을 맡는 Direct3D 이다.


DirectX는 주로 Windows 와 Xbox 플랫폼에서 게임 개발 등으로 많이 사용된다. OpenGL은 크로스 플랫폼 이며, Windows 용으로도 제공 되고 있기 때문에 Windows 환경에서 DirectX 와 OpenGL을 양립 시키는 일도 가능하다.


발상이 워크 스테이션인 것이나 크로스 플랫폼이기 때문에 CAD 및 산업 디자인, 과학 기술 계산이나 의료 의 시각화등의 업무 분야에서는 Direct3D 등의 엔터테인먼트 용도 중시의 그래픽 API 보다 OpenGL 을 사용 되는 것이 많다. 따라서 워크 스테이션이나 업무를위한 GPU 및 비디오 카드 제품은 OpenGL에 최적화 된 사양의 물건이 판매되는 경향이있다. OpenGL 전용이라고 불리는 GPU 는 NVIDIA 사의 " Quadro " 시리즈 와 ATI 의 ' ATI FirePro ( FireGL ) '시리즈가 존재 하고 장치 드라이버를 포함한 사양이 OpenGL 에 최적화 되어 있다. 그러나 이 제품은 DirectX 를 사용하는 응용 프로그램의 성능이 좋지 않은 경향도 있다. 소비자 를 위한 저렴한 비디오 카드제품에 대해 칩을 교체 하거나 저항의 위치를 이동 하거나 BIOS 및 장치 드라이버를 OpenGL용 제품의 것으로 교체하는 등으로, OpenGL 용 제품을 모스 것도 일부 존재하지만, 당연히 그런 개조한 것은 메이커의 보증을 받지 못하고 장치 드라이버 라이센스 계약에 접촉 된다.


또한, Linux 및 Mac OS X의 경우 GPU 벤더에서 OpenGL 드라이버가 공급 되며, 3PIN 스테레오 커넥터와 10 비트 컬러 출력등의 Quadro 및 FirePro와 관련된 하드웨어 기능은 사용할수 없지만 이러한 OS와 결합하여 일반용 비디오 카드를 워크 스테이션 카드 대용으로 사용할 수 있게된다.
실리콘 그래픽스와 마이크로 소프트는 일단 OpenGL과 Direct3D의 통합을 목표로 Fahrenheit 라는 3D 그래픽 API의 공동 개발을 1997년에 시작한 적이 있는데, 1999년 말까지 계획은 사실상 좌절 되었다. 또한 마이크로 소프트는 OpenGL ARB의 설립시의 멤버이기도 했지만, 2003년에 탈퇴했다.




OpenCL 과의 관계

OpenGL 사양을 관리하는 Khronos 그룹에 의해 비슷하게 관리 되는 개방형 API로서, GPGPU를 포함한 이기종 컴퓨팅 자원 혼합 환경 (이기종 환경)의 병렬 컴퓨팅 API인 OpenCL이 존재한다. OpenCL은 Direct3D 와 OpenGL 그래픽 리소스를 처리 할 수있는 상호 운용성이 존재하지만, 다른 한편으로 OpenGL 버전 4.3 에서 DirectX 처럼 GPGPU 용의 연산 쉐이더를 도입 하고있다. 그러나 OpenCL은 여전히 ​​이기종 환경에 특화된 다양한 플랫폼 API 이지만, OpenGL의 연산 쉐이더는 보다 그래픽 용도에 특화한 GPGPU의 것이되어, 충돌 이라기보다는 오히려 상호 보완적인 역할을 담당하게 된다.