2008.03.05 16:25

What is Open GL ?

오픈 GL [Open GL]
2D와 3D를 정의한 컴퓨터 산업 표준 응용 프로그램 인터페이스(API). 작도나 특수 효과를 내는 일련의 수행 명령어를 기술한 것으로 반복 효과를 낼 수 있고 각 운영 체계(OS)의 독립된 윈도 기능에 해당 시스템의 윈도 환경에서 동작할 수 있도록 각 OS별로 특수 ‘접속(glue)’ 루틴을 제공한다. 오픈 GL이 API를 통해 호출할 수 있는 내장 기능에는 숨은 면 제거, 투명화, 반 에일리어싱, 텍스처 매핑, 픽셀 조작, 변형을 위한 모델링, 대기 효과(안개, 연기, 아지랑이 등) 등의 기능이 포함된다.

그래픽 표준 기술중의 하나구요. 굉장히 많은 부분에서 사용되고 있지만,,,
일반적인 유저들에게는 게임으로 접할기회가 가장 많지요..

다이렉트 X 와 OPEN GL, 보통 이 두가지가 요즘의 3D 의 주축이지요.
게임 씨디 사서 보시면, 이 게임이 어떤 환경을 기반으로 했다라고 설명서에 나오지요.
요즘은 다이렉트 X 가 많은 것 같던데,,
빠르고 편리하게 3D 제어가 되는게 다이렉트 X 이면,,
우수한 그래픽 품질을 보이는게 OPEN GL 입니다.

그래서, 보통 빠른 움직임이 중요한 게임 쪽에는 다이렉트x 가 많이 쓰이고,
OPEN GL 은 대표적으로 3Dstudio MAX, LightScape 같은 그래픽 프로그램으로 쓰입니다.
쓰이는 분야는 건축, 인테리어, 디자인 계통의 재질감을 중요시하는 쪽이구요.

실질적으로, OPEN GL 사용하는 프로그램이나 게임을 접할 경우가 아니라면,
Open GL 항목은 기본으로 그냥 두시는 편이 좋습니다.

공부할 책자로는

Open GL Super Bible - 2판
Michael Sweet, Richard S. Wright (지은이), 남기혁 (옮긴이)

OpenGL Game Programming
Dave Astle, Kevin Hawkins (지은이), 류광 (옮긴이)

이 두책을 권합니다.



OpenGL

OpenGL은 Open Graphics Library의 약자로 미국 SGI(Silicon Graphics)사가 개발한 Workstation급의 고품위 그래픽을 지원하기 위한 소프트웨어 솔루션이다. 원래 게임이 아닌 그래픽전문가용 라이브러리로 개발된 것으로 현 DirectX 에 비해 월등한 3D 알고리즘을 제공하고 있다.

하지만 진정한 Full OpenGL을 수행하기 위해서는 그래픽칩셋자체의 부동소수점연산기능을 지닌 Geomerty엔진이 탑제 되어있어야 하며, ICD(Installable Client Driver)드라이버 지원도 필수적이다.

일반적으로 OpenGL API가 급부상하게된 계기는 1인칭 3D액션게임으로 유명한 IDsoft사로 인해 널리 알려지기 시작하였다. 이것은 우리가 잘 알고있는 Quake Series게임이며 동시에 Quake 주 엔진으로 사용된 것이다. Quake제작 당시 OpenGL은 WorkStation급에서만 사용된 그래픽 솔루션으로 일반적인 3D게임에 사용하리라 곤 생각도 못한 것이었다. 또한 당시 데스크탑 PC에 들어가는 대부분의 그래픽칩셋도 OpenGL 연산이 불가능하였으며, 드라이버 제작에 있어서도 OpenGL 라이센스의 까다로운 요구기능이 많아 그래픽칩셋 제조회사들이 OpenGL Driver를 만들지 않은 이유도 있었다.

이렇게 까다로운 환경 속에 ID사의 새로운 3D 전략물인 Quake 엔진을 OpenGL API기반으로 제작하기 시작하였었다. 물론 OpenGL이 객체모델을 사용하지 않는 점과, 게임에서 OpenGL의 모든 기능이 사용되지 않는 점을 착안해 새로운 형식의 OpenGL 시스템 파일을 만들게 되었으며, 이것은 완전한 Full OpenGL이 아닌 OpenGL의 일부만 사용하는 새로운 형식의 알고리즘을 개발하였던 것이다. 결과는 Full OpenGL 드라이버인 ICD(installable Client Driver)에 대한 제한적으로 지원하게끔 만든 MCD(Mini Client Driver)이었다. 물론 본질적으로 그래픽용 라이브러리인 만큼 Quake 엔진의 성능은 엄청난 파워를 보여주고 있다.

게임과 같은 대중적인 힘을 바탕으로 OpenGL은 전문성을 벗어나기 시작하였던 것이다. 현재는 Quake Series 형식의 OpenGL 엔진을 사용한 게임이 상당 수 있으며, 모든 그래픽카드에서 제한적이나마 OpenGL을 활용할 수 있게 되었던 것이다. 이렇게 대중성을 바탕으로 보편화되어진 반면, 보다 전문성을 고려한 OpenGL도 계속적인 발전이 있었다. 이는 FireGL Series와 같은 고급 하드웨어 출현과 함께 다양한 고급 그래픽 Application들이 등장하고 있으며, 현 최고의 그래픽 소프트웨어 솔루션으로서 자리잡고 있음을 보여주는 결과이기도 하다.

아쉬운 이야기이지만 한때는 SGI사의 OpenGL API와 다음에 설명될 Direct 3D API의 장점만이 통합되어져 새로운 API 형식인 Fahrenheit 프로젝트가 공동연구 되기도 하였다.

Fahrenheit

Workstaion급 윈도우용 OpenGL 개발을 위해 기존부터 합작 해오던 마이크로소프트사와 SGI에서 Direct 3D와 OpneGL의 장점만을 취합하여 만들고자한 새로운 형식의 차세대 API였다. 또한 DirectX 8.0에 포함되어 범용적이며, 진보된 3D API의 세계를 보여줄 수 있었으나, 프로젝트 파기로 인하여 아쉬움을 남기곤 하였다.

Fahrenheit는 주로 게임에 사용할 일반 유저 와 그래픽의 강력한 가속을 원하는 고급 유저 모두를 충족시키기 위한 새로운 형식으로 다음과 같이 세 가지 컴포넌트로 설계 될 예정이었다.

Fahrenheit Low-Level API(FLL) : 다방면의 보편적 지원.
Fahrenheit Scene Graph API(FSG) : 그래픽 Application 전용.
Fahrenheit Large Model Visualization Extensions(FLM):3D Modeling 전용.



1. OpenGL 이란

- 3차원 그래픽 라이브러리 (opengl32.lib glu.lib glaux.lib glut.lib)
- C라이브러리로 구성
- OpenGL를 기초로하여 발전된 라이브러리

-> Open inventor , Open Performer

2. OpenGL 화면 구성

1> aux로 메인 화면을 구성
auxInitDisplayMode(AUX_DOUBLE | AUX_RGBA); //디스플레이 형식 설정 auxInitPosition(GLint x, GLint y, Glsizei width, Glsizei height);

//윈도우의 위치와 크기 (상위좌측 100,100에 넓이250, 높이 250 픽셀)

auxInitWindow("3D Aux library objects"); //윈도의 캡션설정
auxMainLoop(RenderScene);

2>glut로 메인화면 구성

glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
glutCreateWindow("mouse");
glutMainLoop();

3> MFC로 화면구성

- 디바이스 컨텍스트 : 윈도우에서 GDI함수를 사용하여 그림을 그림
- 렌더링 컨텍스트 : OpenGL의 설정과 명령을 기억
- 픽셀 포멧 구조체 사용

* wiggle함수 사용 (OpenGL에 윈도우 지원을 추가하기위해 win32에 추가되었음

3. 선, 점, 면 다각형을 이용하여 3D로 그리기

1>모드

GL_POINTS , GL_LIENS, GL_LINE_STRIP, GL_LINE_LOOP,
GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN,
GL_QUADS, GL_QUAD_STRIP, GL_POLYGON

2>사용방법

glBegin(GL_POINTS)
glVertex3f(0.0f, 0.0f,0.0f);
glEnd();





4. 프로젝트
1> 목적 컴퓨터그래픽에 의한 사이버 인물의 자동생성 그래픽 시스템 개발
2>단계
A. 사이버 인물의 형태 자동 생성

- OpenGL을 이용하여 사이버 인물 나타내기
- 데이터의 파일 입력
- 데이터의 변수 처리

picking ->특징점 추출 -> 상관관계가 있는 영역 지정 ->vertex간의 비율을 통한 변수 처리

B. 사이버 인물의 움직임 자동 생성

----------------------------------------------------------------------------------------
Open GL은 원래 실리콘그래픽스에서 만든 3D 그래픽 처리 라이브러리입니다. 실리콘그래픽스라면 3D 계열에서는 그 기술력이 세계 최고라고 할만큼 뛰어나고, 각종 하드웨어와 소프트웨어는 영화와 애니메이션, 시뮬레이션을 비롯한 각처에서 3D 관련 처리를 위해서 가장 널리 쓰이는 제품입니다.
실제 우리가 3D를 처리하는 프로그램을 만들기 위해서는 대단히 까다로운 그래픽 루틴을 만들어야 합니다. 이것만 해도 엄청난 작업이기 때문에 단지 3D 그래픽을 돌리고 처리하기 위한 소프트웨어를 만드는 것도 엄두가 나기 쉽지 않습니다.
(참고로, 우리가 영화에서 보는 3D 그래픽은 모두 3D 그래픽 툴로 만드는 것이라고 생각하지만, 실제 툴로 할 수 있는 것은 한계가 있고, 필요한 부분에서는 직접 프로그램을 짜서 처리해야 하는 경우도 종종 있다네요.)
이렇게 까다로운 3D 그래픽을 쉽게 하기 위해서 만들어진 라이브러리가 OpenGL입니다. 이 라이브러리를 씀으로써, 프로그래머는 3D 그래픽을 어떻게 계산하고 화면에 뿌려야 하는가에 대한 저차원적인 고민에서 벗어나서, 그래픽 자체에만 골몰하는 창조적인 작업에 더 많은 시간을 들일 수 있도록 하여 줍니다.
예를 들면 어떠한 3차원 공간에다가 공을 하나 만들고 싶다면 예전에는 좌표 계산과 2차원 화면에 투영하는 방법, 그리고 여기에 텍스처를 입히고 조명 효과를 주는 방법을 비롯한 수많은 복잡한 계산 처리에 대해서 모든 것을 프로그래머가 그 방법을 만들고 계산을 하여야 했지만, OpenGL과 같은 라이브러리에서는 준비된 함수들을 사용하면 라이브러리에서 이에 필요한 계산 처리들을 해주는 식이 됩니다.
그리고 OpenGL은 실리콘그래픽스는 물론이고 여러 유닉스 시스템과 윈도우 NT에도 포팅되어 있으므로 다른 운영체제들 사이에서도 호환성을 제공해 줍니다.
아주 빠른 속력이 필요한 게임을 제외하고는 대부분의 3D 관련 프로그램은 이 OpenGL을 사용하여 만들어지고 있습니다.

'도전과 모험의 세계☆ > 그래픽스프로그래밍' 카테고리의 다른 글

what is vertex ?  (0) 2008.03.07
what is rendering ?  (0) 2008.03.07
What is pipeline? 도대체 파이프 라인이 뭐야?  (0) 2008.03.07
3/7 파란만장한 전과생 일기...  (0) 2008.03.07
What is Open API ?  (0) 2008.03.05
What is Open GL ?  (0) 2008.03.05
Trackback 0 Comment 0