ala*_*oc3 5 opengl graphics framebuffer
我现在正在学习帧缓冲器,我只是不明白Color附件的作用.我理解framebuffers.
第二个参数的重点是什么:
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureColorBuffer, 0);
Run Code Online (Sandbox Code Playgroud)
当我将其更改为COLOR_ATTACHMENT1时,为什么没有任何内容绘制到我的帧缓冲区?
如何通过将纹理设置为颜色附件1来绘制到帧缓冲区?为什么使用多个颜色附件会有用?它是否类似于一次绘制多个纹理的glActiveTexture(GL_TEXTUREi)概念?
我只是想了解更多开放的gl.谢谢.
Ret*_*adi 10
是的,帧缓冲区可以有多个颜色附件,第二个参数可以glFramebufferTexture2D()
控制你设置的是哪个.可以使用以下方式查询支持的最大颜色附件数:
GLint maxAtt = 0;
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxAtt);
Run Code Online (Sandbox Code Playgroud)
所有实现支持的最小数量为8.
要选择要渲染到哪个缓冲区,请使用glDrawBuffer()
或glDrawBuffers()
.这两个调用之间的唯一区别是第一个允许您只指定一个缓冲区,而第二个调用支持多个缓冲区.
在您尝试的示例中,您可以GL_COLOR_ATTACHMENT1
使用以下任一方式渲染到:
glDrawBuffer(GL_COLOR_ATTACHMENT1);
Run Code Online (Sandbox Code Playgroud)
要么:
GLenum bufs[1] = {GL_COLOR_ATTACHMENT1};
glDrawBuffers(1, bufs);
Run Code Online (Sandbox Code Playgroud)
默认值是GL_COLOR_ATTACHMENT0
,这解释了为什么在没有使用此调用的情况下成功呈现到附件0的原因.绘制缓冲区列表是FBO状态的一部分.
要为多个颜色缓冲区生成输出,请在片段着色器中定义多个输出.
多个颜色缓冲区(通常称为缩写MRT =多个渲染目标)的一种常用用法是延迟着色,其中用于着色计算的内插顶点属性存储在初始渲染过程中的多个缓冲区中.然后,使用来自第一遍中产生的缓冲区的属性值,仅对第二遍中的可见像素执行实际的阴影计算.有关其工作原理的更完整说明,请参阅http://ogldev.atspace.co.uk/www/tutorial35/tutorial35.html.
归档时间: |
|
查看次数: |
4317 次 |
最近记录: |