OpenGL之帧缓冲

本文主要包括帧缓冲的基本概念、函数使用,以及引出离屏渲染和后处理的介绍。

概要

所谓帧缓冲是做什么用的,就是用来存储渲染数据的地方,可以理解为显存。几何数据(顶点坐标、纹理坐标等)和纹理经过一系列渲染管道最终计算出屏幕上的所有像素点,它们需要一个地方来存放,这个地方就是帧缓冲。帧缓冲中的数据会被显示器读取来刷新显示。

OpenGL可以同时存在多个帧缓冲,创建窗口时OpenGL会自动创建一个默认帧缓冲,专门用于该窗口的渲染显示。其它的需要用户创建自定义帧缓冲。

帧缓冲中包括有颜色缓冲区、深度缓冲区、模板缓冲区这三类缓冲区。

我用下图介绍一下帧缓冲的用处,以深度缓冲为例。
在由三维映射至二维空间时,Z坐标将会被转换为深度值写入深度缓冲中,测试和混合阶段执行后,像素点的颜色值会被写入帧缓冲的颜色附件中,最终帧缓冲会显示到显示器上。
在这里插入图片描述

帧缓冲

附件

要注意,帧缓冲并不包含缓冲数据的内存,它只是包含颜色缓冲区、深度缓冲区、模板缓冲区的附加点。这些对象才是真正的缓冲,它们被称之为附件。绑定到帧缓冲的这个过程叫做“附加”。

例如下图中,帧缓冲中包含有多个附加点可将真正的缓冲区附加上去。

在这里插入图片描述

OpenGL定义,一个帧缓冲对象包括有

  1. 多个颜色缓冲附件,
  2. 一个深度缓冲附件,
  3. 一个模板缓冲附件。

可以通过一个结构体来理解它(仅用于理解):

struct FrameBuffer
{
    int[] color;
    int depth;
    int stencil;
};

注意到颜色缓冲区可以是一个列表,这是由OpenGL定义的,允许用户同一时间将颜色缓冲区渲染到多个目标(multiple render targets,MRT)。

MRT是什么意思呢?
比方说,你可以附加两个颜色附件,然后在这两个附件上渲染出整个场景。可能一个是完整版场景,一个低采样版场景,分别作不同用途,可能其中带有遮罩或者用于其它后处理。

此外OpenGL定义,一个完整的帧缓冲对象至少要有一个颜色附件,否则将无法被使用。

函数


创建帧缓冲和创建VBO时非常类似地。

void glGenFramebuffers(GLsizei n, GLuint* ids)
void glDeleteFramebuffers(GLsizei n,
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值