
컴퓨터를 사용해서 그림을 그리는 기술이다. 즉, 시각화해서 이미지화하는 기술이다. 응용 분야가 다양하고 Gouraud 셰이딩부터 텍스쳐 매핑, Z-버퍼 알고리즘 등 그 영사도 굉장히 길다. 그래픽스를 크게 두 가지 구성요소로 나눌 수 있는데, 모델링과 렌더링이다.
무엇을 그릴까에 대한 문제로 그래픽으로 표현하고자 하는 장면(Scene) 내부의 물체(Object)를 정의하는 작업이다. 가상 물체를 표현할 수 있는 자료구조와 해당 자료 구조를 처리할 수 있는 알고리즘이 모델링의 핵심이다.
모델링에 의해 정의된 물체르 어떻게 그릴까에 대한 문제이다. 조명, 관찰자, 사상(Projection), 물체의 재질 등이 중요한 요소가 된다.
추가적으로 애니메이션이란 개념도 들어간다.
Open Graphics Library의 줄임말로 그래픽 하드웨어(GPU)와 통신할 수 있도록 지원해주는 API 또는 표준 규격이다. 즉, 함수의 이름, 기능, 인자, 작동 방식 등이 설명된 API 규격이다. GPU를 이요한 하드웨어 가속화를 통해 렌더링을 통한 2D, 3D 벡터 그래픽을 표현할 수 있다.
API?
운영 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만드는 인터페이스
하드웨어 가속? 어떤 작업을 CPU가 처리하는 것이 아닌 해당 작업에 최적화 된 하드웨어 (그래픽카드, 사운드 카드 등)에게 작업을 전송하여 해당 하드웨어가 CPU보다 빠르게 고품질의 작업을 처리하는 것
즉, GPU를 통한 하드웨어 가속이란 간단히 그래픽 작업을 CPU가 아닌 GPU에게 작업을 시킴으로 그래픽 작업의 속도와 성능을 향상 시키는 것!
+a로 스마트폰에서도 OpenGL을 지원하고 있다. Android에서 OpenGL을 사용할 때 OpenGL ES를 사용하는데, ES는 Embedded System의 약자로 핸드폰, PDA 등과 같은 디바이스에 내장해서 사용할 수 있도록 만들어진 API이다.
쉽게 말해 OpenGL을 확장하고 쿼리하고 로드하는 크로스 플랫폼 라이브러리이다. OpenGL을 Window환경에서 사용할 때 opengl32.h 따위의 헤더 파일을 추가하는데, 이 헤더 파일은 OpenGl 1버전 이후로 업데이트 되지 않았다. 복잡한 Open GL의 기본 + 확장 기능을 사용하기 위해 필요한 확장 라이브러리가 GLEW이다.
OpenGL의 최신 구현은 그래픽 카드에 탑재되어 있다. GLEW는 그래픽 카드 드라이버의 DLL(동적 라이브러리)에 탑재되어 있는 OpenGL 함수들의 포인터들을 불러와 자체적으로 정의한 OpenGL 함수들과 연결한다. 즉, 우리는 OpenGL 함수들을 GLEW를 통하여 사용할 예정이다.
#include <GL/glew.h>
glewExperimental = GL_TRUE;
glewInit();
Shold return GLOW_OF. If it fails, it return the error.
Can read error with glewGetErrorString(result);
if (!GLEW_EXT_framebuffer_object) {}
wglew.h for Windows only functions
GLFW는 Graphics Library Framework로 OpenGL과 함께 쓰는 유틸리티 라이브러리이다. GLFW 외에도 GLUT, FreeGLUT, GLU 등 다양하게 있는데, GLFW가 가장 활발히 업데이트 되고 사용하는 유틸리티 라이브러리이다.
유틸리티 라이브러리가 필요한 이유는 OpenGL이 그래픽스 API일 뿐 창을 생성하거나, 키 입력을 받는 등의 기능은 제공하지 않기 때문이다. GLFW는 창을 생성, 제어할 수 있게 해주고, OpenGL context를 생성 및 관리할 수 있게 해준다. 더불어 위에서 언급한, 키 입력과 이벤트 생성도 할 수 있게 해준다.
GLFW 대신 사용할 수 있는 라이브러리
GLFW와 SDL의 대안
- GLFW (OpenGL Extension Wrangler) lets us interface with modern OpenGL and handle platform-specific extensions safely
- GLFW lets us create windows and openGL contexts, as well as handle user input
- SDL does all that GLFW does, and more