[컴퓨터그래픽스] OpenGL Pipeline (Simplified)

Serun1017·2024년 10월 23일
0

컴퓨터그래픽스

목록 보기
13/31

이전 장에서 우리는 처음으로 OpenGL Pipeline을 이용해 그림을 그렸다. 이제 이 Pipeline에 대해 자세하게 알아보자.

OpenGL Pipeline (Simplified)

우리는 앞 장 에서 Simplified Rendering Pipeline에 대해 배웠다. OpenGL 역시 이 Pipeline에 따라 동작한다.

Simplified Rendering Pipeline.png

OpenGL Pipeline에서는 일반적으로 Application 을 실행하면 CPU Memory에 기본적인 Objects의 vertex data를 생성하고 이를 GPU 메모리(이하 Arrays)에 Vertex Buffer Objects(이하 VBOs) 형태로 전달한다. GPU는 VBOs에서 vertex data를 읽어 각 vertex에 대해 shader 프로그램을 실행한다. 최종적으로 화면에 출력 될 데이터들은 Framebuffer에 저장되어 출력 된다.

OpenGL Pipeline (Simplified).png

Vertex

Geometric Objects는 vertex의 조합을 이용해 표현된다. 이때 vertex는 다음의 정보를 갖고있다.

  • positional coordinates
  • colors
  • texture coordinates
  • any other data associated with that point in a space

이러한 vertex data는 VBOs(Vertex Buffer Objects) 형태로 저장되고, VBOs 는 VAOs(Vertex Array Objects) 의 bind 되어 GPU에 전달된다.

VBOs (Vertex Buffer Objects)

VBO는 GPU의 메모리에 vertex data 를 저장하는데 사용되는 버퍼이다. 이 버퍼는 정점의 위치, 색상, 법선 벡터, 텍스처 좌표 등과 같은 데이터를 저장하며, CPU에서 GPU로 데이터를 전송하는 역할을 한다.

특징

  • GPU 메모리에 저장
    데이터를 CPU 메모리가 아닌 GPU 메모리에 저장함으로써, 매 프레임마다 데이터를 다시 전송할 필요 없이 빠르게 처리할 수 있다.
  • 정점 데이터 효율화
    데이터를 여러 번 반복적으로 사용할 수 있어 성능이 크게 향상된다.
  • 유연성
    VBO는 위치, 색상, 텍스처 좌표 등 다양한 형태의 정점 데이터를 저장할 수 있다.

VAOs (Vertex Arrays Objects)

VAO는 정점 속성(Vertex Attribute) 설정을 저장하는 객체이다. VBO 자체는 단순히 데이터를 저장할 뿐이지만, 이 데이터가 어떻게 해석될지(위치, 크기, 속성 등)는 VAO에서 관리한다. VAO는 VBO의 속성 설정을 한 번 정의해 놓고, 여러 번 사용할 수 있도록 도와준다.

특징

  • 정점 속성 관리
    VAO는 정점 데이터의 구조를 정의하고, OpenGL이 어떤 방식으로 데이터를 해석할 지를 결정한다. 예를 들어, 각 정점의 좌표는 몇 개의 값으로 이루어져 있는지, 어떤 위치에 저장되어 있는지를 저장한다.
  • 상태 저장
    VAO를 사용하면 정점 속성 구성을 저장하고 나중에 빠르게 불러올 수 있다. 이를 통해 매번 VBO를 설정하는 번거로움을 줄일 수 있다.
  • 다수의 VBO를 저장 가능
    VAO는 여러 개의 VBO를 한 번에 관리할 수 있어, 다양한 정점 속성을 관리하는 데 유리하다.

OpenGL's Gemotric Primitives

OpenGL's Gemotric Primitives.png

How to send your data

How to send your data.png

0개의 댓글