【问题标题】:Can a GL_FLOAT texture be assigned to a FBO as a COLOR attachment?可以将 GL_FLOAT 纹理作为颜色附件分配给 FBO 吗?
【发布时间】:2011-10-14 12:07:58
【问题描述】:

对于纹理的屏幕外渲染,我在附件 GL_COLOR_ATTACHMENT0 处附加了一个由

定义的纹理

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,宽度,高度,0,GL_RGBA,GL_FLOAT,NULL);

然后我使用输出 vec4 的片段着色器渲染到 FBO,所以通常情况下应该没问题。为了检查我是否正确显示纹理,我使用了函数

glTexSubImage2D()

在纹理中间添加一些灰色像素。纹理显示正确(我可以在正确的位置完美地看到这些像素),但纹理的其余部分只是嘈杂的伪影(当它不是黑色时)。

这是因为我将 GL_FLOAT 用于 GL_RGBA 纹理吗?如果是,我如何在 GLSL 中将 uvec4 转换为 vec4?我的主着色器的输出是 vec4,我不知道如何将 usampler2D 纹理的 uvec4 输出转换为我的最终 vec4。

感谢您提供的任何答案:)

编辑:我找到了解决方案:我没有清除 2 次渲染之间的 GL_COLOR_BUFFER_BIT。

【问题讨论】:

    标签: c++ opengl fbo


    【解决方案1】:

    我知道这个问题是自我回答的,但需要对此进行讨论:

    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,width,height,0,GL_RGBA,GL_FLOAT,NULL);
    

    这样做不会创建浮点纹理。它创建一个包含归一化无符号整数的纹理。

    actual format of a texture是第三个参数;它定义了纹理实际包含的内容。最后三个参数定义了您尝试upload data to the texture 的方式;如果指针为 NULL(并且没有绑定 PBO),则参数表示 nothing

    【讨论】:

    • 哦,那我错了。非常感谢您的回答,这可以解释为什么我的阴影贴图不起作用:)
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多