我现在正在学习框架缓冲区,我只是不明白颜色附件是干什么的。我理解框架缓冲。
第二个参数的意义是什么:
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureColorBuffer, 0);
当我将帧缓冲区更改为COLOR_ATTACHMENT1时,为什么没有任何东西吸引到它?
如何通过将纹理设置为“颜色附件1”来绘制到框架缓冲区?为什么使用多色附件是有用的?它是否类似于glActiveTexture(GL_TEXTUREi)一次绘制多个纹理的概念?
我只是想了解更开放的通用语言。谢谢。
发布于 2016-01-24 07:33:57
是的,一个框架缓冲区可以有多个颜色附件,glFramebufferTexture2D()
的第二个参数可以控制您设置的是哪个颜色附件。支持的颜色附件的最大数量可以使用以下方法查询:
GLint maxAtt = 0;
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxAtt);
所有实现所支持的最小数目为8。
若要选择要呈现给哪个缓冲区,请使用glDrawBuffer()
或glDrawBuffers()
。这两个调用之间唯一的区别是,第一个调用只允许指定一个缓冲区,而第二个则支持多个缓冲区。
在您尝试的示例中,可以使用以下任何一种方法将其呈现为GL_COLOR_ATTACHMENT1
:
glDrawBuffer(GL_COLOR_ATTACHMENT1);
或者:
GLenum bufs[1] = {GL_COLOR_ATTACHMENT1};
glDrawBuffers(1, bufs);
默认情况是GL_COLOR_ATTACHMENT0
,这解释了为什么在不使用此调用的情况下成功地将附件0呈现为附件0。绘制缓冲区列表是FBO状态的一部分。
若要为多色缓冲区生成输出,请在片段着色器中定义多个输出。
一种常用的多色缓冲器(通常被缩写为MRT =多个渲染目标)是延迟着色,其中用于阴影计算的插值顶点属性存储在初始呈现传递中的多个缓冲区中。然后,使用第一次传递中产生的缓冲区的属性值,只对第二次传递中的可见像素执行实际的阴影计算。例如,有关如何工作的更完整的说明,请参见http://ogldev.atspace.co.uk/www/tutorial35/tutorial35.html。
https://stackoverflow.com/questions/34972716
复制相似问题