OpenGL 라이브러리
#include <GL/glew.h>
#include <GLFW/glfw3.h>
OpenGL을 활용하기 위해 사용하는 대표적인 라이브러리는
GLFW와 GLEW이다
-GLFW (Graphics Library Framework)
GLFW는 OpenGL 애플리케이션의 창 관리 및 입력 처리를 담당하는 라이브러리이다
-GLEW (OpenGL Extension Wrangler Library)
GLEW는 OpenGL 확장 기능을 쉽게 사용할 수 있도록 도와주는 라이브러리이다
OpenGL 작동방식
일반적으로 작동방식에는
객체지향 방식과 State Machine 방식으로 구분된다
OpenGL은 State Machine 방식을 사용한다
객체지향 방식 vs. State Machine 방식
// 객체지향 방식
Triangle t1, t2; //삼각형 두 개를 정의
Draw(t1); //t1 객체를 전달함으로써 삼각형 1을 그림
Draw(t2); //t2 객체를 전달함으로써 삼각형 2를 그림
// State Machine 방식
Triangle t1, t2; //삼각형 두 개를 정의
Activate(t1); //삼각형 1을 처리중인 상태로 설정
Draw(); //현재 처리중인 데이터(=삼각형 1)를 화면에 그림
Activate(t2); //삼각형 2를 처리중인 상태로 설정
Draw(); //현재 처리중인 데이터(=삼각형 2)를 화면에 그림
OpenGL의 State Machine 방식
OpenGL에서는 State Machine 방식을 사용하고
예시로는 Vertex buffer를 만들어주는 아래의 코드를 통해 알 수 있다
unsigned int bufferID;
glGenBuffers(1, &bufferID); //1. 데이터를 저장할 버퍼 객체를 만들고(1개), 그 버퍼 객체의 주소를 bufferID에 저장
glBindBuffer(GL_ARRAY_BUFFER, bufferID); //2. 방금 만든 buffer(두 번째 인자로 주소를 넘겨준)를 "작업 상태"로 만듬
// 첫 번째 GL_ARRAY_BUFFER는 버퍼에 배열 데이터가 저장될 것이라는 의미
glBufferData(GL_ARRAY_BUFFER, //3. 이제 실제로 GPU에 데이터를 넘겨주는 함수를 호출
6 * sizeof(float), //데이터의 크기를 전달
positions, //데이터 포인터 전달
GL_STATIC_DRAW); //데이터 변경이 적을 것이라는 것을 알려줌(GPU의 효율적인 동작을 위한 Hint일 뿐)
Vertex buffer를
glBindBuffer를 통해 activate하고
굳이 bufferID를 넘겨주지 않고
현재 activate 되어있는 버퍼에 맞는 데이터 형태를 알려주는 glBufferData를 사용한다
'게임 그래픽스 > [전북대] OpenGL' 카테고리의 다른 글
[OpenGL Note] 2D Transform (0) | 2024.04.12 |
---|---|
[OpenGL Note] 렌더링 파이프라인 (0) | 2024.04.12 |
[OpenGL Note] 모델링 (0) | 2024.04.11 |
[OpenGL Note] 기초 수학 (0) | 2024.04.11 |
[OpenGL Note] 컴퓨터 그래픽스 (0) | 2024.04.10 |