GL_COLOR_ATTACHMENT 是做什么的?

What does GL_COLOR_ATTACHMENT do?

我现在正在学习帧缓冲区,只是不明白颜色附件的作用。我了解帧缓冲区。

第二个参数有什么意义:

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureColorBuffer, 0);

当我将其更改为 COLOR_ATTACHMENT1 时,为什么没有任何内容绘制到我的帧缓冲区?

如何通过将纹理设置为颜色附件 1 来绘制到帧缓冲区? 为什么使用多种颜色附件会有用? 是不是类似于glActiveTexture(GL_TEXTUREi)一次绘制多个纹理的概念?

我只是想了解更多 open gl。谢谢

是的,帧缓冲区可以有多个颜色附件,glFramebufferTexture2D() 的第二个参数控制您要设置的附件。最大支持的颜色附件数量可以查询:

GLint maxAtt = 0;
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxAtt);

所有实现支持的最小数量是 8。

要select 要渲染到哪个缓冲区,请使用glDrawBuffer()glDrawBuffers()。这两个调用之间的唯一区别是第一个调用只允许您指定一个缓冲区,而第二个调用支持多个缓冲区。

在您尝试的示例中,您可以使用以下任一方式渲染到 GL_COLOR_ATTACHMENT1

glDrawBuffer(GL_COLOR_ATTACHMENT1);

或:

GLenum bufs[1] = {GL_COLOR_ATTACHMENT1};
glDrawBuffers(1, bufs);

默认值为 GL_COLOR_ATTACHMENT0,这解释了为什么您无需使用此调用就可以成功呈现附件 0。绘制缓冲区列表是 FBO 状态的一部分。

要为多个颜色缓冲区生成输出,您可以在片段着色器中定义多个输出。

多颜色缓冲区(通常以首字母缩写词 MRT = 多渲染目标表示)的一个流行用途是延迟着色,其中用于着色计算的插值顶点属性在初始渲染中存储在多个缓冲区中经过。然后在第二遍中仅对可见像素执行实际的着色计算,使用来自在第一遍中生成的缓冲区的属性值。有关其工作原理的更完整解释,请参见示例 http://ogldev.atspace.co.uk/www/tutorial35/tutorial35.html