kwan's note

Opengl - VAO VBO 컴퓨터 그래픽스 본문

graphics VR AR/OpenGL

Opengl - VAO VBO 컴퓨터 그래픽스

kwan's note 2022. 4. 28. 14:44
반응형

opengl 데이터는 버퍼를 통해서 저장을 한다.

그중에서도 vertex에 대한 정보 저장을 이해하기 위해서는 vao와 vbo가 어떻게 만들어지고 사용하는지 이해해야 한다.

이런 데이터는 cpu가 아닌 gpu의 vram에 저장되어 병렬처리하므로 빠르게 화면에 랜더링할 수 있다.

 

VAO (Vertex array object),VBO(vertex buffer object)에 대해서 살펴보면 

 

VBO는 그래픽카드의 vram에 저장되는 데이터로 하나의 vertex들에 대한 정보들이 들어간다. 예를들어 vertex의 위치, vertex의 색상, vertex의 normal정보등이 이러한 vbo에 해당한다.

 

 

VAO는 여러개의 VBO를 담을 수 있다. 즉, 어떠한 오브젝트에 대한 정보를 저장하는데 사용된다. VBO에 저장된 정보(vetex의 위치, 색상, 노말 등)을 하나의 VAO에 담음으로 하나의 물체로 바인딩하고 이에 대한 랜더링을 진행한다.

 

 

즉, 이를 작성하면 다음과 같다.

//VAO 먼저 만들자
//VAO ID 선언
GLuint vao;
//ID에 바인딩
glGenVertexArrays(1, &vao);
//객체 타입 바인딩
glBindVertexArray(vao);

////////////////////////그릴 데이터 준비
struct Vertex {
    Vec2d position;
};

const Vertex vertices[6] = {
    Vertex{Vec2d{2.0f, 8.0f}},
    Vertex{Vec2d{1.0f, 5.0f}},
    Vertex{Vec2d{5.0f, 6.0f}},

    Vertex{Vec2d{4.0f, 4.0f}},
    Vertex{Vec2d{6.0f, 1.0f}},
    Vertex{Vec2d{8.0f, 3.0f}},
};
//////////////////////////그릴 데이터 준비 끝


//VBO ID 준비
GLuint vbo;
//ID에 바인딩
glGenBuffers(1, &vbo);
//버퍼 객체에 타입 바인딩
glBindBuffer(GL_ARRAY_BUFFER, vbo);
//데이터 담기 (형태,크기,실제데이터,방식)
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

 

이제 이렇게 선언한 vertex를 사용하기 위해 다음과 같이 vertex attib pointer를 통해 어떻게 해석해야 하는지 전달한다.

 

//실제로 사용하기 위한 enable
glEnableVertexAttribArray(0);
//opengl에서 해당 버퍼를 해석할 수 있는 실마리 제공
glVertexAttribPointer(0, 6, GL_FLOAT, GL_FALSE, 6, (void*)0);

반응형

'graphics VR AR > OpenGL' 카테고리의 다른 글

[Opengl] phong lighting - 라이팅  (0) 2022.08.01
opengl - 유니폼 (uniform)  (0) 2022.05.05
openGL  (0) 2022.03.30