关于 OpenGL 纹理、帧缓冲区和 UV 坐标的问题

问题描述

我正在尝试将纹理从帧缓冲区对象映射到三角形网格平面。问题是它最终变成了黑色。

帧缓冲区的代码

    glGenFramebuffers(1,&fbo);
    glBindFramebuffer(GL_FRAMEBUFFER,fbo);

    glGenTextures(1,&fbo_texture);
    glBindTexture(GL_TEXTURE_2D,fbo_texture);
    glTexImage2D(GL_TEXTURE_2D,GL_RGB,height,width,GL_RGBA,GL_UNSIGNED_BYTE,NULL);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR );
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glBindTexture(GL_TEXTURE_2D,0);

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

所以。问题出在哪里:(

解决方法

纹理对象和纹理采样器uniform之间的绑定是通过纹理单元实现的。需要分配纹理对象绑定的纹理单元的编号,而不是纹理采样uniform上的纹理对象:

glUniform1i(textureUniform,fbo_texture);

glUniform1i(textureUniform,0);

您的着色器无法编译,因为采样器统一变量与函数 texture 同名。重命名统一变量:

uniform sampler2D u_texture;

void main()
{ 
    color = texture(u_texture,texpos);
}