본문 바로가기

개인공부/C++ Graphics

OpenGL #8 Vertex Arrays Object

Vertex Array Object 는 Vertex Buffer 와 굉장히 비슷하다.

Vertex Array 는 Direct 에는 없고 OpenGL 에만 있는것이다.

 

한마디로 Vertex Buffer 가 여러개 있을때 각각의 버퍼마다 Layout 지정을 해주는 Attribute 를 관리해주는 Array 라는 뜻이다. 사진으로 보자면

 

 

glVertexAttribPointer 의 첫번째 아규먼트는 0 이다. Array 에 첫번째에 바인딩 됐다는 뜻이다.

 

만약 다른 Buffer 를 넣고싶다면 1 로 설정하고 pointer 를 사용하면 Array 에 두번째 인덱스에 들어 갈 것이다.

 

 

 

 

맨위에 vao 를 생성해주고 원래 코드를 사용한다면 이런식으로 될 것이다.

 

VAO [] 생성

Buffer 생성

Buffer Attribute 지정 (어떤 indices 를 사용할것인지, 크기는 얼마나 될것인지 등등...

Buffer Attribute 활성화

Buffer Attribute 를 포인터를 이용해 VAO 에 삽입.

VAO[BufferAttribute, null, null]

이런식으로 되는것이다.

 

만약 다른놈들 넣는다면 그 이후로 쭉쭉 들어오겠지.

 

 

여기서 질문을 할 수 있을것이다.

 

VAO 를 Buffer Attribute 를 새로 생성할떄마다 새롭게 생성해서 VAO 와 Buffer 를 1:1 대응으로 사용해도되는가?

아니면 프로그램 전체를 위해 VAO 를 하나만 만들고 새로운 Buffer 를 만들떄마다 지정해주면서 사용할 것인가.

성능 차이는 있는가?

 

옛날에는 VAO 를 하나만 만들고 Buffer 를 관리하는게 좋다고 한다 하지만 요즘은 업데이트이후에 환경마다 다르다고한다. 두개의 옵션을 성능 체크를하면서 잘 골라보도록 하자.

 

 

 

 

마지막엔 bindvertexarray 를 이용해 vao 를 바인딩 하고 실행하면 잘 돌아간다.

'개인공부 > C++ Graphics' 카테고리의 다른 글

OpenGL #9 Renderer  (0) 2025.01.13
OpenGL (지금까지 내용)  (0) 2025.01.13
OpenGL #7 Uniform  (0) 2025.01.12
OpenGL #6 Error Handling  (1) 2025.01.11
OpenGL #5 Index Buffer  (0) 2025.01.11