Skip to content

OpenGL:Framebuffers

설명

FrameBuffer는 화면에 그려질 화면 전체에 대한 정보를 담는 공간, 메모리입니다. 해상도라고 아시죠? 1024768 또는 800480 등등... 그 해상도에 그려질 화면에 대한 정보를 담습니다.

  • RenderBuffer는 FrameBuffer의 구성요소들이죠. FrameBuffer를 위해선 3가지 정보가 필요합니다. Color, Depth, Stencil입니다. 현재 제가 이해한 것은 Color, Depth까지구요, Stencil은 좀 더 공부를 해야 될 것 같습니다. RenderBuffer는 그 각각의 정보를 담는 메모리 공간입니다.
    • Frame Buffer = Color + Depth + Stencil 입니다.
    • Color Buffer는 화면의 색깔 정보를 저장하고 있습니다. 그리고 Depth Buffer는 해당 Vertex가 어느 정도 깊이에 있는지를 저장합니다.
    • Depth Buffer는 화면에 찍히는 점은 2D좌표계를 가지게 됩니다.
    • Stencil 은 번역하면 공판화라 할 수 있다. 이름처럼 공판화와 같은 원리를 가지게 된다. 즉 그릴 도화지 위에 종이를 하나 올리고 위에 종위에 구멍을 낸다. 그럼 구멍을 낸만큼의 위치에 그림을 그릴 수 있다. 즉 윗 종이에 가려진 부분에서는 그리고 싶은 종이에 그림을 그릴 수 없게 된다.
  • 텍스쳐(Texture)는 이미지에 대한 Color Buffer입니다. 따라서 FrameBuffer는 다음과 같이 표현할 수도 있겠죠.
    • FrameBuffer = Texture + Depth + Stencil
    • 그렇다고 텍스쳐(Texture)가 컬러버퍼(Color Buffer)에 1:1 대응 되는 개념은 아닙니다. 텍스쳐(Texture)를 통해서 컬러 버퍼(Color Buffer)의 값을 채울 수 있기 때문에 위의 공식처럼 말씀드린 겁니다.
    • OPENGL에서는 텍스쳐(Texture)의 제약 사항이 있습니다. 무조건 해상도가 2의 지수형태여야 합니다. 2,4,8,16,32,64,128, 256, 512, 1024, ... 등의 곱으로 표현해야 합니다. 256100, 200200의 형태는 지원되지 않습니다.
    • 해상도는 픽셀단위로 표현하지만 텍스쳐로 이미지의 정보를 읽어오게 되면 해당 픽셀을 표현할 색깔(Color)값을 같이 저장 해야 합니다. 픽셀+RGBA = 텍셀 이라고 부릅니다. 텍셀은 픽셀과 같은 위치지만 거기에 색깔(Color)값이 같이 저장된 형태로 생각하시면 좋겠습니다.
    • 기본적으로 텍스쳐(Texture)는 색깔(Color)에 대한 정보를 가지고 폴리곤의 원하는 위치에 가져가 바른다고 생각하시면 됩니다. 원하는 위치를 조절하는 기능이 TexCoordinate입니다. 그렇지만 텍스쳐(Texture)는 화면 전체의 정보를 저장하는 것이 아닌 원래 그림이 가진 정보만을 저장합니다. 그림의 해상도가 500500이었다면 텍스처의 컬러 정보는 500500의 정보를 가집니다. 당연히 화면이 더 크게 되면 모자란 부분을 채우기 위해 근처의 색깔값을 가져다 쓰게 되면서 그림의 품질이 떨어지게 됩니다. 일단은 이정도만 알아두셔도 괜찮습니다. 나중에 보다 빠른 랜더링을 연구하실 생각이라면 연구가 필요한 부분입니다.

See also

Favorite site