[Grapics] OpenGL (1)

suhan0304·2024년 6월 26일

Graphics - OpenGL

목록 보기
1/5
post-thumbnail

Graphics...?

컴퓨터를 사용해서 그림을 그리는 기술이다. 즉, 시각화해서 이미지화하는 기술이다. 응용 분야가 다양하고 Gouraud 셰이딩부터 텍스쳐 매핑, Z-버퍼 알고리즘 등 그 영사도 굉장히 길다. 그래픽스를 크게 두 가지 구성요소로 나눌 수 있는데, 모델링과 렌더링이다.

모델링

무엇을 그릴까에 대한 문제로 그래픽으로 표현하고자 하는 장면(Scene) 내부의 물체(Object)를 정의하는 작업이다. 가상 물체를 표현할 수 있는 자료구조와 해당 자료 구조를 처리할 수 있는 알고리즘이 모델링의 핵심이다.

렌더링

모델링에 의해 정의된 물체르 어떻게 그릴까에 대한 문제이다. 조명, 관찰자, 사상(Projection), 물체의 재질 등이 중요한 요소가 된다.

추가적으로 애니메이션이란 개념도 들어간다.

OpenGL...?

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이란 GPU와 통신할 수 있도록 지원해주는 API 또는 표준 규격이다.
  • 하드웨어 가속이란 특정 작업을 CPU가 아닌 해당 작업에 최적화된 다른 하드웨어(GPU 등)에게 작업을 처리하게 하는 것을 뜻한다.
  • GPU 하드웨어 가속이 항상 성능을 올려주는 것은 아니면 특정 상황(그래픽 장치가 안좋은 경우 등)의 경우 오히려 비효율적일 수 있다.
  • OpenGL을 웹에서 사용할 수 있도록 한 것이 WebGL이며, 디바이스에서 사용할 수 있도록 한 것이 OpenGL ES 이다

GLEW?

쉽게 말해 OpenGL을 확장하고 쿼리하고 로드하는 크로스 플랫폼 라이브러리이다. OpenGL을 Window환경에서 사용할 때 opengl32.h 따위의 헤더 파일을 추가하는데, 이 헤더 파일은 OpenGl 1버전 이후로 업데이트 되지 않았다. 복잡한 Open GL의 기본 + 확장 기능을 사용하기 위해 필요한 확장 라이브러리가 GLEW이다.

OpenGL의 최신 구현은 그래픽 카드에 탑재되어 있다. GLEW는 그래픽 카드 드라이버의 DLL(동적 라이브러리)에 탑재되어 있는 OpenGL 함수들의 포인터들을 불러와 자체적으로 정의한 OpenGL 함수들과 연결한다. 즉, 우리는 OpenGL 함수들을 GLEW를 통하여 사용할 예정이다.

  • GLEW는 플랫폼 마다 사용 방법이 다르고 복잡한 OpenGL을 손쉽게 사용할 수 있게 해주는 확장 라이브러리이다.
  • GLEW를 사용하면 최신 OpenGL의 기본 + 확장 기능까지 사용할 수 있다.

+ GLEW

  • OpenGL Extension Wrangler
  • Interface for OpenGL versions above 1.1
    최근에는 OpenGL 3버전 이상을 대부분 사용함, 4버전 이상을 사용하기도 하는데 현대 버전으로 상용화된 버전은 3버전부터라고 생각하면 됨
  • Load OpenGL extensions
  • Some extensions are platform specific, GLEW can check if they exist on that platform
    그 플랫폼에 GLEW를 사용하기 전에 실제로 그 플랫폼에 GLEW가 있는지 확인함 = 멀티 플랫폼 프로그램을 만들때 유용함
  • Alternatives : GL3W, glLoadGen, glad, glsdk, glbinding, libepoxy, Glee

using GLEW?

#include <GL/glew.h>
  • After initialisation OpenGL Context :
glewExperimental = GL_TRUE;
glewInit();

Shold return GLOW_OF. If it fails, it return the error.
Can read error with glewGetErrorString(result);

  • Check extenstions exist :
if (!GLEW_EXT_framebuffer_object) {}

wglew.h for Windows only functions


GLFW

GLFW는 Graphics Library Framework로 OpenGL과 함께 쓰는 유틸리티 라이브러리이다. GLFW 외에도 GLUT, FreeGLUT, GLU 등 다양하게 있는데, GLFW가 가장 활발히 업데이트 되고 사용하는 유틸리티 라이브러리이다.

유틸리티 라이브러리가 필요한 이유는 OpenGL이 그래픽스 API일 뿐 창을 생성하거나, 키 입력을 받는 등의 기능은 제공하지 않기 때문이다. GLFW는 창을 생성, 제어할 수 있게 해주고, OpenGL context를 생성 및 관리할 수 있게 해준다. 더불어 위에서 언급한, 키 입력과 이벤트 생성도 할 수 있게 해준다.

  • GLFW는 가장 활발히 업데이트되고 있는 유틸리티 라이브러리이다.
    -창 생성, OpenGL context 생성 및 관리, 키 입력 관리, 이벤트 생성 등을 담당한다.

+ GLFW

  • OpenGL FrameWork
  • Handles window creation and control
  • Pick up and process input from the keyboard, mouse, joystick and gamepad
  • Even allows multiple monitor support
  • Uses OpenGL context for windows

SDL

GLFW 대신 사용할 수 있는 라이브러리

  • SimpleDirectMedia Layer
  • Can do almost everything GLFW can do
  • and more (Audio, Threading, Filesystems)
  • Very popular, especially for Indie developers
  • User in : FTL, Amnesia, Starbound and Dying Light
  • Even used in level editors for Source Engine and Cryengine

GLFW와 SDL의 대안

Alternatives

  • SFML (Simple Fase Multimedia Library) : Like SDL but with even more features
    - but the openGL context is very weak. based on 2d only graphics
  • GLUT (OpenGL Utility Toolkit): Is no longer maintained. Try to avoid it.
  • Win32 API : Lowest level for window creation. Only attempt if you know what you're doing

  • 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

profile
Be Honest, Be Harder, Be Stronger

0개의 댓글