Computer Graphics

VBO(Vertex Buffer Object) 버텍스 버퍼 오브젝트란

익플루 2014. 2. 18. 20:02
반응형

OpenGL에서 버퍼에 대해 이해하기 위해

정리해두어야 할 것 같아 정리해보았다.

 

 

버텍스 버퍼(Vertex Buffer Object)란?

버텍스란 정점을 이야기 한다. 쉽게 말해 정점의 정보를 저장해 두는 정점들의 집합 버퍼이다.

3D 공간상의 점을 이야기 한다. 이점은 x, y, z (즉 좌표) 이외에 다른 정보도 갖는다.

 

보통은 그래픽카드 비디오 메모리에 올린다. 이 점들에서 선을 연결하고 면을 만든후 텍스쳐를 입히고 모니터에 뿌려주는 것이다. 이것이 3D 카드가 하는 일이다.

 

이 버퍼는 어떻게 구성하는게 좋을까? 보통은 오브젝트 단위로 구성하는게 좋다. 예를 들면 하나의 그림은 하나의 버텍스 버퍼로 구현해도 되지만 독립되어있다면 나누는게 좋다. 또 카메라도 생각을 해야한다. 해당 오브젝트를 렌더링 할필요 없다면 해당 버텍스 버퍼를 렌더링 못하게 하면 된다. 카메라에 안보인다는것이 확실하다면 그런 방법도 있다.

 

하지만 Lock을 실행할때는 대단히 주의 해야한다. cpu가 이 작업에 할당되고 다른 일을 못하게 된다.

 

Vertex Buffer lock을 건다라고 하는 것 Lock함수 호출을 통해서 리턴되는 포인터를 통해서 버텍스 버퍼의 메모리로의 직접적인 접근을 얻는 것이다. 중요한 점은 이때 리턴되는 포인터는 Lock이 걸려있는 동안에 한해서만 유효하다는 것이다.

 

DirectX의 모든 surface들에서 그러하듯, 마찬가지로 Vertex Buffer에 대한 Lock 역시 아주 느린 process에 해당한다. 따라서 Lock을 사용할 때엔 매우 신중해야 한다.

 

 

 

기본 VBO functions

다음 함수는 VBO 액세스 및 조작의 핵심을 형성한다.

In OpenGL 1.4:
GenBuffersARB(sizei n, uint *buffers)
Generates a new VBO and returns its ID number as an unsigned integer. Id 0 is reserved.(새로운 VBO를 생성하고, 부호없는 정수로 그 ID 번호를 반환한다. ID 0은 예약되어 있다.)
 
BindBufferARB(enum target, uint buffer)
Use a previously created buffer as the active VBO. (활성 VBO로 이전에 생성 된 버퍼를 사용한다.)
 
BufferDataARB(enum target, sizeiptrARB size, const void *data, enum usage)
Upload data to the active VBO. (활성 VBO에 데이터를 업로드 할 수 있다.)
 
DeleteBuffersARB(sizei n, const uint *buffers)
Deletes the specified number of VBOs from the supplied array or VBO id. (제공된 배열 또는 VBO ID 번호를 반환합니다. ID 0은 예약되어 있다.)
 
In OpenGL 2.1,[3] OpenGL 3.x[4] and OpenGL 4.x:[5]
 
GenBuffers(sizei n, uint *buffers)
Generates a new VBO and returns its ID number as an unsigned integer. Id 0 is reserved. (새로운 VBO를 생성하고, 부호없는 정수로 그 ID 번호를 반환합니다. ID 0은 예약되어 있습니다.)
 
BindBuffer(enum target, uint buffer)
Use a previously created buffer as the active VBO. (활성 VBO로 이전에 생성 된 버퍼를 사용합니다.)
 
BufferData(enum target, sizeiptrARB size, const void *data, enum usage)
Upload data to the active VBO. (활성 VBO에 데이터를 업로드 할 수 있습니다.)
 
DeleteBuffers(sizei n, const uint *buffers)
Deletes the specified number of VBOs from the supplied array or VBO id. (제공된 배열 또는 VBO ID와 VBOs의 지정된 번호를 삭제합니다.

 

 

반응형