VAO (Vertex Array Object)
정점의 속성 구조를 저장하는 객체임
버텍스를 어떻게 해석할지 정의함 ex. 첫 3개 float은 xyz, 4번째부터 3개 flaot은 색상값 등
glGenVertexArrays()로 생성함
glBindVertexArray()로 바인딩 후 설정 저장 및 사용 가능
여러 VAO 생성하여 각각 다른 설정 가능
VBO (Vertex Buffer Object)
실제 정점 데이터를 GPU에 저장함
glGenBuffers()로 생성함
glBindBuffer(GL_ARRAY_BUFFER, id)로 바인딩함
glBufferData()로 버텍스 데이터 전송함 (데이터 복사 후 삽입)
GL_STATIC_DRAW → 자주 바뀌지 않는 데이터에 사용함
float vertices[] = {
x, y, z, r, g, b
};
EBO (Element Buffer Object)
정점 인덱스를 통해 중복 없이 재사용 가능함
glGenBuffers() → EBO 생성함
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo)로 바인딩함
glDrawElements() 호출 시 사용함
예제에서는 glDrawArrays() 사용 중 → EBO 사용 안함
unsigned int indices[] = {
0, 1, 2,
3, 4, 5
};
glVertexAttribPointer() - VAO
버텍스 구조를 OpenGL에 설명함
ex) location 0 → 위치, location 1 → 색상
stride, offset으로 분리된 구조 처리 가능함
설정 후 glEnableVertexAttribArray()로 활성화함
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void)0); // 위치
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void)(3*sizeof(float))); // 색상
Shader (가볍게)
vertex shader → 정점 위치 처리함
fragment shader → 픽셀 색상 결정함
glCreateShader(), glShaderSource(), glCompileShader()로 생성 가능
glAttachShader(), glLinkProgram()으로 프로그램 연결함
while (!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderProgram);
glBindVertexArray(VAO[0]);
glDrawArrays(GL_TRIANGLES, 0, 3);
glUseProgram(shaderProgram2);
glBindVertexArray(VAO[1]);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers(window);
glfwPollEvents();
}
정리 및 해제
glDeleteBuffers(), glDeleteVertexArrays()로 메모리 해제 가능
glDeleteProgram()으로 셰이더 프로그램 삭제 가능

'OpenGL' 카테고리의 다른 글
| OpenGL 공부하기 #4 - 행렬과 변환 (3) | 2025.07.14 |
|---|---|
| OpenGL 개발하기 - Sierpinski Triangle (0) | 2025.07.14 |
| OpenGL 공부하기 #2 - 그래픽스 파이프라인 (0) | 2025.06.28 |
| OpenGL 공부하기 #1 - 윈도우 생성 (0) | 2025.06.24 |