갬장장이
'computer graphics/OpenGL' 카테고리의 글 목록 (2 Page)

computer graphics/OpenGL

computer graphics/OpenGL

[OpenGL] 4. Index Buffer

사각형을 그리려면 두 개의 폴리곤이 필요하며, 각각의 폴리곤 당 3개의 정점이 존재하므로 6개의 정점으로 표현할 수 있다. 이때 6개의 정점(vertices)를 각각 개별적으로 저장하는 건 엄청난 메모리 낭비이다. 위치가 겹치는 정점이 있기 때문이다. (정점의 위치 까짓꺼 몇 개 중복으로 저장하면 된다고 생각할 수도 있으나, 위치 말고도 텍스쳐, Normal 등 정점별로 저장되는 데이터들도 다 정점마다 개별적으로 저장하게 되면 엄청난 메모리 낭비가 발생한다. 폴리곤의 수가 늘어나면 낭비되는 메모리의 양은 무시할 수 없다.) 때문에 OpenGL을 비롯한 그래픽스 API에서는 index buffer을 사용한다. 원리는 굉장히 단순하며 직관적으로 이해 가능하다. 값을 중복 저장하는 대신, 중복이 없는 어레이 ..

computer graphics/OpenGL

[OpenGL] 3. Shader

Shader: GPU 상에서 실행되는 프로그램 *참고: 게임 엔진들은 플레이어 세팅에 맞게 동적으로 셰이더 코드를 만들어낸 후 컴파일해 사용하기도 한다. 렌더링 파이프라인에서 핵심적인 역할을 하는 두 개의 셰이더가 바로 Vertex shader 그리고 Fragment shader(혹은 Pixel Shader)이다. 중간 과정을 생략하고 렌더링 파이프라인을 아주 간단하게 표현하면 아래와 같다. Draw call -> Vertex Shader -> Fragment Shader -> Rasterization Vertex Shader: 각 Vertex(정점)마다 실행되며, 각 vertex가 스크린의 어느 부분에 놓여야 하는지(position)를 결정한다. Fragment Shader: 각 픽셀마다 실행되며, 각..

computer graphics/OpenGL

[OpenGL] 2. Vertex Attribute

Vertex : Vertex는 꼭 position만을 의미하지 않는다. 즉 Vertex array에는 좌표값도 들어갈 수 있지만, Texture, tangent 등 다양한 값들이 들어갈 수 있다. Attribute : 이렇게 들어가는 다양한 종류의 값들을 Attribute라고 부른다. glVertexAttribPointer : Vertex array에 다양한 값들이 있다고 하더라도 결국은 숫자들이 든 어레이에 불과하기 때문에, Vertex Array 그 자체로만은 어떤 값이 무얼 나타내는지 알 수 없다. 때문에 array의 어디부터 어디까지는 어떤 attrib인지를 opengl에게 알려주어야 한다. 이 역할을 해주는게 glVertexAttribPointer 함수이다. 파라미터는 아래와 같다. glEnab..

computer graphics/OpenGL

[OpenGL] 1. Vertex Buffer

OpenGL은 State Machine이다 -> 이미 셰이더나 Vertex buffer들을 메모리에 가지고 있는 상태에서 어떤 것들을 사용해 화면에 렌더링할지 결정하는 것이지, 어떤 함수에 셰이더외 버퍼를 인자로 넘겨주는 방식이 아니다. 셰이더, 버퍼, 텍스쳐 등의 각 요소들에는 int형 id가 부여된다. Vertex Buffer: Vertex를 저장하는 버퍼(메모리 상에 byte를 입력할 수 있는 공간)이다. GPU의 VRAM에 저장된다.

computer graphics/OpenGL

[OpenGL] 0. OpenGL

본 카테고리에 있는 게시글들은 개인 필기용으로 작성중이라 글이 읽기 편하게 정돈되있지 않다는 점 양해 부탁드립니t다🙏 해당 카테고리에서 사용하는 소스코드 원본은 여기에서 찾아보실 수 있습니다. OpenGL은 Specification에 불과하며, 실제 코드로의 구현은 각 GPU 제조사에서 맡는다. 고로 opengl은 오픈소스도 아니다. Modern opengl과 legacy opengl이 있으며 modern에는 셰이더가 존재한다. 셰이더란 단순히 GPU에서 실행되는 코드를 의미한다. 편의를 위해 2가지 라이브러리를 사용한다 GLFW: Window 뿐 아니라 여러 OS에서 편리하게 창을 띄워 Context를 사용할 수 있게 해주는 라이브러리 GLEW: Opengl 함수를 쓰려면 그래픽스 드라이버의 OpenG..