我想通过并使用纹理着色...但每次我尝试使用它即使在最简单的方式我得到黑盒子,有时是白色 - 取决于纹理我把他..莫名其妙....glsl着色器通过和渲染纹理
这里的代码片段女巫应该工作(我已经打消了我的包装,使其更容易):
fbo->bind();
fbo->drawBuffer(0);
fbo->setClearColor(1.0, 1.0, 1.0, 1.0);
fbo->cleanCurrentTexture();
GLuint location;
location = glGetUniformLocation(Program->getID(), "sampler");
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, fbo2->getTexture(0));
glUniform1i(location, 0);
Program->begin();
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glVertex3f(-1.0f, -1.0f, 0.0f);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();
Program->end();
fbo->unbind();
glColor3f(1.0,1.0,1.0);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, fbo->getTexture(0));
glBegin(GL_QUADS);
glTexCoord2d(0.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glTexCoord2d(0.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 0.0f);
glTexCoord2d(1.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glTexCoord2d(1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();
glDisable(GL_TEXTURE_2D);
顶点着色器:
#version 120
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
}
片段着色器:
#version 120
uniform sampler2D sampler;
void main()
{
gl_FragColor = texture2D(sampler, gl_TexCoord[0].xy);
}
Ofcourse我尝试绑定的纹理存在及其完整。这里是它的参数:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
如果在片段着色器中输出其他固定颜色,会发生什么情况? – Plow
它就像一个魅力... – Krzycho
它一定是某个地方愚蠢 - 我找不到什么。我尝试了一些纹理......即使是使用SOIL库从文件中加载了一些原始的海峡,每次我都会从纹理中获得纯色填充。并且它每次都从相同的纹理取得相同的颜色,取自不同的部分 - 但通常从右上角(1,1)开始。有趣的是,着色器,纹理,FBO和其他的东西工作正常,请帮助..你是我最后的希望:( – Krzycho