본문 바로가기

ComputerScience/Computer Graphics

OpenGL - 6 Shaders (2)

728x90

6.5 More attributes!

- 이전 chapter에서 VBO를 채우는 방법과 vertex attribute pointer를 configure해서 VAO에 이 attributes들을 담는 방법을 살펴봤다.

- 이번에는 3 floats color data를 vertices array에 더해 주자.

- vertices는 각각의 좌표, 색의 대한 정보를 가지고 있는 배열이다.

    float vertices[] = {
       // positions         // colors
        0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom right
       -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, // bottom left
        0.0f,  0.5f, 0.0f, 0.0f, 0.0f, 1.0f  // top
   };

 

- 전보다 더 많은 데이터를 vertex shader에게 보내주어야 한다. vertex shader가 color value를 vertex attribute input으로 받기 위해서는 다음과 같은 작업이 필요하다.

#version 330 core
   layout (location = 0) in vec3 aPos;   // position has attribute position 0
   layout (location = 1) in vec3 aColor; // color has attribute position 1
   out vec3 ourColor; // output a color to the fragment shader
void main() {
       gl_Position = vec4(aPos, 1.0);
       ourColor = aColor; // set ourColor to input color from the vertex data
   }

- 위치에 대한 attribute의 위치는 0번, 색에 대한 attribute의 위치는 1번임을 명시한다.

- 새로운 vertex attribute를 추가해주면서 VBO의 메모리가 갱신되었기 때문에 vertex attribute pointer를 reconfigure해줘야 한다.

- VBO의 메모리는 다음처럼 생겼다.

    // position attribute
   glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float),
                         (void*)0);
   glEnableVertexAttribArray(0);
   // color attribute
   glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float),
                         (void*)(3* sizeof(float)));
   glEnableVertexAttribArray(1);

- 0번 위치에 있는 attribute는 점의 좌표였다. glVertexAttrib Pointer로 좌표들을 어떻게 해석해야 하는지 알려주도록했다.

- 마찬가지의 방법이로 이번에는 새로 추가된, 1번 위치에 있는 attribute(색깔)를 configure한다.

728x90
반응형

'ComputerScience > Computer Graphics' 카테고리의 다른 글

CG - 2. 라이브러리 소개  (0) 2021.09.15
CG - 1. 컴퓨터 그래픽스?  (0) 2021.09.02
OpenGL - 6 Shaders (1)  (0) 2021.07.06
OpenGL - 5 Hello Triangle (3)  (0) 2021.06.30
OpenGL - 5 Hello Triangle (2)  (0) 2021.06.29