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啊,好的,当我这么做的时候,表面确实出现了。但我不知道这意味着什么。此外,制服的名称也不是问题。这不是我在程序中实际使用的。