如何在现代OpenGL中渲染多个纹理



如果我正确理解fbo,我可以将几个2D纹理附加到不同的颜色附着点上。我想使用这个功能来写一些不同类型的数据从一个片段着色器(例如世界位置和法线)。看起来在过去,这涉及到在不同的索引上写入gl_FragData,但是gl_FragData已经不存在了。现在该怎么做呢?

你可以添加输出变量到你的片段着色器。下面是一个例子:

layout(location=0) out vec4 color;
layout(location=1) out vec3 normal;
layout(location=2) out vec3 position;
void main() {
    color = vec4(1,0,0,1);
    normal = vec3(0,1,0);
    position = vec3(1,2,3);
}

正如dari所说,您可以使用layout(location=0)说明符。

另一个在着色器外分配位置的方法是:

glBindFragDataLocation(_program, 0, "color");
在shader中:
out vec4 color;

有关输出缓冲区的更详细的讨论,请参阅以下代码:https://www.opengl.org/wiki/Fragment_Shader Output_buffers

相关内容

  • 没有找到相关文章

最新更新