티스토리 뷰
OpenGL super bible 개정 6판 번역본을 공부하면서 기억해두고 싶은 것, 내가 과연 제대로 이해하고 있는게 맞나 싶은 것들을 정리하는 차원에서 이 글을 작성한다.
저작물의 특정 내용을 인용한다고 명시하더라도 법적 문제가 발생할 수 있다는 소리를 어디서 들었는데, 되도록이면 책의 표현을 나의 방식으로 해석하고, 표현하고자 할 것이다. 법적 문제가 없길..
1. 시작
OpenGL은 데이터를 저장하고 접근하기 위해 두 가지 형태의 데이터 스토리지를 제공한다고 한다.
1. 버퍼
2. 텍스처
이번 글에서는 버퍼를 알아보도록 하자.
버퍼는 타입이 정해져 있지 않은 데이터의 연속 공간이다.
삼각형의 각 꼭지점 좌표값들을 담거나, 특정 위치의 색 정보, RGB값들을 담을 공간이라고 할 수 있다.
우선 용어 정리를 해보자 : 물리적인 공간과 논리적인 공간
물리적인(Physical) 공간이란 실제로 데이터가 저장되는 곳, CPU(?), GPU(?), 주기억장치(RAM) 혹은 보조기억장치의 어느 위치, 혹은 범위라고 할 수 있다.
논리적인(Logical) 공간은 물리적인 공간에 존재하는 특정 데이터 집합을 대표하는 개념으로 개발자가 코딩함에 있어서 직접 다룰 수 있는 객체라고 생각한다(내 생각). 예를 들어 Buffer object나, Vertex array object를 논리적인 공간이라고 할 수 있다.
중요한 것은 OpenGL에서 물리적인 공간과 논리적인 공간을 어떻게 연결하는지, 논리적인 공간을 어떻게 다루는 지에 대한 것이다.
우선 내가 책을 통해 배운 내용을 그림으로 한 번 표현해보도록 하겠다.
Figure 1. 내가 생각한 Diagram (190308수정사항 발견, 수정예정!)
Figure 2. 구글링을 통해서 조사한 diagram
(출처 :https://cognitivewaves.wordpress.com/opengl-terminology-demystified/)
내가 생각한 diagram이랑 구글링을 통해 찾은 diagram이 서로 다르다. Figure2를 먼저 보면, CPU part, GPU part로 구분되어 있는 것을 확인할 수 있다. 또한 Shader와 VBO가 Vertex Attribute를 통해서 연결되어 있는 것을 볼 수 있다.
반면, 내가 생각한 diagram은 VBO와 VAO가 vertexAttrib*을 통해 연결되어 있는 것으로 표현되어 있다. Figure1과 Figure2에서 각각의 요소들의 연결 상태, 연결 순서는 차이가 있다. 어떤 diagram이 opengl을 더 정확하게 표현하고 있는지 확인하기 위해서는 알아봐야 할 것들이 있다. 우선 VAO와 VBO의 차이를 알아야 한다.
2. VAO와 VBO
https://www.khronos.org/opengl/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_(C_/_SDL)의 글에서 그 차이를 알아낼 수 있었다.
VAO(Vertex Array Object)는 하나 혹은 여러개의 VBO(Vertex Buffer Object)를 담을 수 있는 객체에 해당한다. 그리고 최종적으로 렌더링된(Complete rendered) 오브젝트에 대한 정보를 저장하는데 사용된다. 예를 들면, 정육면체의 8개의 꼭지점 좌표값(X, Y, Z, W)들과 각 꼭지점에서의 색(R, G, B, A)들을 담는데 사용되는 것이 VAO이다.
VBO는 컴퓨터의 비디오 카드(GPU)의 메모리 공간(high speed memory) 상에 있는 메모리 버퍼에 해당한다.
예를 들면, 하나의 정육면체는 두 개의 VBO로 표현 가능한데, 위치 정보를 담고 있는 VBO와 색상 정보를 담고 있는 VBO로 구분할 수 있다.
여러 VBO를 준비시켜두고 필요에 따라 VAO와 연결하여 원하는 오브젝트를 그릴 수 있도록 하기 위해
glVertexAttribPointer와 glEnableVerTexAttribArray와 같은 함수를 사용하는 것으로 보인다.
혹시 제가 작성한 이 글에 잘못된 점이 있다면 댓글로 알려주시면 감사하겠습니다.
'Programming > OpenGL' 카테고리의 다른 글
[OpenGL] attribute, uniform, varing 정리 (0) | 2019.03.08 |
---|---|
[OpenGL] 오픈지엘 데이터 관련 개념 정리(2. Uniform) (0) | 2019.03.07 |
[OpenGL] gluLookAt 함수에 대한 궁금증 (0) | 2019.01.20 |