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

C++ 关于OpenGL纹理、帧缓冲区和UV坐标的问题,c++,opengl,textures,framebuffer,C++,Opengl,Textures,Framebuffer,我试图将纹理从帧缓冲区对象映射到三角形网格平面。问题是它最终是黑色的 帧缓冲区的代码 glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); glGenTextures(1, &fbo_texture); glBindTexture(GL_TEXTURE_2D, fbo_texture); glTexImage2D(GL_TEXTURE_2D, 0, GL_R

我试图将纹理从帧缓冲区对象映射到三角形网格平面。问题是它最终是黑色的

帧缓冲区的代码

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

    glGenTextures(1, &fbo_texture);
    glBindTexture(GL_TEXTURE_2D, fbo_texture);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, height, width, 0, 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);

所以。问题在哪里:(

纹理对象和纹理采样器一致性之间的绑定是通过纹理单元实现的。您需要指定纹理对象绑定到的纹理单元的编号,而不是纹理采样器一致性上的纹理对象:

glUniform1i(纹理均匀,fbo_纹理);

glUniform1i(质地均匀,0);

无法编译着色器,因为采样器统一变量与函数
纹理
具有相同的名称。重命名统一变量:

均匀采样2D u_纹理;
void main()
{ 
颜色=纹理(u_纹理,texpos);
}

纹理对象和纹理采样器均匀性之间的绑定是通过纹理单元实现的。您需要指定纹理对象绑定到的纹理单元的编号,而不是纹理采样均匀性上的纹理对象:

glUniform1i(纹理均匀,fbo_纹理);

glUniform1i(质地均匀,0);

无法编译着色器,因为采样器统一变量与函数
纹理
具有相同的名称。重命名统一变量:

均匀采样2D u_纹理;
void main()
{ 
颜色=纹理(u_纹理,texpos);
}

谢谢您的快速回复:)但是,当我尝试这样做时,曲面无法渲染。@RealName您必须重命名制服。我已经扩展了答案。感谢您的快速回复:)但是,当我尝试这样做时,曲面无法渲染。@RealName您必须重命名制服。我扩展了答案。“我正在尝试将一个纹理从帧缓冲区对象映射到一个三角形网格平面。”-您想说的是,您想生成一个纹理,然后将该纹理放到网格上。在绘制网格之前,是否绑定默认帧缓冲区?-<代码>glBindFramebuffer(GLU帧缓冲区,0)@rabbi76我知道,是的。为调试目的做一些更改。区分纹理生成或基本体绘制是否失败。e、 g.
color=纹理(纹理,texpos)+0.5@rabbi76啊,好的,当我这么做的时候,表面确实出现了。但我不知道这意味着什么。此外,制服的名称也不是问题。这不是我在程序中实际使用的。“我正在尝试将纹理从帧缓冲区对象映射到三角形网格平面。”-您想说的是,您想生成一个纹理,然后将该纹理放置在网格上。在绘制网格之前是否绑定默认帧缓冲区?-<代码>glBindFramebuffer(GLU帧缓冲区,0)@rabbi76我知道,是的。为调试目的做一些更改。区分纹理生成或基本体绘制是否失败。e、 g.
color=纹理(纹理,texpos)+0.5@rabbi76啊,好的,当我这么做的时候,表面确实出现了。但我不知道这意味着什么。此外,制服的名称也不是问题。这不是我在程序中实际使用的。