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 |