일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- VBO
- Phong
- Geoserver
- 지오서버
- 브이월드
- WebMapService
- WMTS
- CeisumJS
- GLM
- V-World
- WMS
- 세슘
- Specular
- Visual Studio
- vs code
- glad
- GLFW
- WebMapTileService
- Diffuse
- OpenGL
- WebMapServiceImageryProvider
- visual studio code
- WebMercatorTilingScheme
- Cesium
- GetTile
- vscode
- lighting model
- 탄젠트 공간
- CesiumJS
- 세슘JS
- Today
- Total
엉뚱하고 기발하게
Vertex Buffer Object(VBO) 본문
본 블로그는 개인적인 공부를 목적으로 작성되었습니다.
작성된 블로그의 내용은 다른 사이트, 블로그를 참고하였으며, 저작권 문제가 있다면 수정하겠습니다.
또한 잘못된 내용으로 인한 불이익은 사용자에게 있습니다.
블로그의 내용은 VS Code에 C++, OpenGL 개발 환경이 설정 되었음을 가정합니다.
만약, 설정되지 않았다면 "OpenGL 개발 환경 설정(VS Code)"를 통해 설정 후 진행세요.
Vertex Buffer Object(VBO)는 Video Device(즉, GPU)에 Vertex Data(position, normal, vector, color, etc)를 관리하기 위해 사용하는 기능입니다.
VBO를 사용하기 위해서 아래의 4가지 함수를 사용합니다.
- glGenBuffers(sizei n, uint *buffers)
- glBindBuffer(enum target, uint buffer)
- glBufferData(enum target, sizeiptrARB size, const void *data, enum usage)
- glDeleteBuffers(sizei n, const uint *buffers)
1. glGenBuffers
생성할 Buffer Object의 수를 지정합니다. 성공하면 unsigned int형 Buffer Object ID를 리턴합니다.
void glGenBuffers(GLsizei n, GLuint * buffers);
- n
생성할 Buffer Object 수를 지정합니다. - buffers
생성된 Buffer Object IDs를 리턴합니다.
2. glBindBuffer
입력된 심볼의 버퍼를 활성화(바인딩)합니다.
void glBindBuffer(GLenum target, GLuint buffer);
- target
활성화 할 버퍼 심볼을 지정합니다. - buffer
사용할 Buffer Object ID를 입렵합니다.
target 심볼
GL_ARRAY_BUFFER, GL_ATOMIC_COUNTER_BUFFER, GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_DRAW_INDIRECT_BUFFER, GL_DISPATCH_INDIRECT_BUFFER, GL_ELEMENT_ARRAY_BUFFER, GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, GL_QUERY_BUFFER, GL_SHADER_STORAGE_BUFFER, GL_TEXTURE_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, or GL_UNIFORM_BUFFER.
3. glBufferData
실제 GPU 메모리를 할당 합니다.
void glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage);
- target
생성 및 초기화 할 버퍼 타입을 지정합니다. - size
생성할 버퍼의 크기를 지정 합니다. 단위는 byte 입니다. - data
생성시 버퍼를 초기화 할 데이터의 포인터를 지정합니다, NULL 입력시 데이터의 복사 없이 진행합니다. - usage
버퍼의 사용 패턴을 지정합나다.
target 심볼
GL_ARRAY_BUFFER, GL_ATOMIC_COUNTER_BUFFER, GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_DRAW_INDIRECT_BUFFER, GL_DISPATCH_INDIRECT_BUFFER, GL_ELEMENT_ARRAY_BUFFER, GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, GL_QUERY_BUFFER, GL_SHADER_STORAGE_BUFFER, GL_TEXTURE_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, or GL_UNIFORM_BUFFER.
usage 패턴
GL_STREAM_DRAW, GL_STREAM_READ, GL_STREAM_COPY, GL_STATIC_DRAW, GL_STATIC_READ, GL_STATIC_COPY, GL_DYNAMIC_DRAW, GL_DYNAMIC_READ, or GL_DYNAMIC_COPY.
4. glDeleteBuffers
Buffer Objects를 제거합니다.
void glDeleteBuffers(GLsizei n, const GLuint * buffers);
- n
제거할 Buffer Object 수를 지정합니다. - buffers
제거할 Buffer Object IDs를 지정합니다.
5. 사용 예
// 정점 배열 float vertices[] = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.0f, 0.5f, 0.0f }; unsigned int VBO; // VBO ID 생성 glGenBuffers(1, &VBO); // VBO 바인딩 glBindBuffer(GL_ARRAY_BUFFER, VBO); // VBO 메모리 확보, 초기화, 복사 glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // VBO 제거 glDeleteBuffers(1, &VBO);
https://mr-dingo.github.io/opengl/2019/01/02/VAOandVBO.html
https://en.wikipedia.org/wiki/Vertex_buffer_object
https://www.khronos.org/opengl/wiki/Category:Core_API_Reference
'Graphics > OpenGL' 카테고리의 다른 글
Lambertian reflectance (0) | 2020.10.19 |
---|---|
Blinn-Phong reflection model (0) | 2020.10.19 |
Phong reflection model(Phong lighting model) (0) | 2020.10.19 |