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);
}

Конечно, текстура, которую я пытаюсь связать, существует, и она завершена. Вот его параметры:

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);

1

Решение

Как и говорит Плу в своем комментарии, я считаю, что это связано с тем, что координаты текстуры не заданы. Вы устанавливаете только координаты текстуры для второго квадратора. Второй четырехугольник также не рисуется с помощью программы шейдеров, и он рисуется в тех же координатах, что и первый, что означает, что он должен быть либо полностью белым (потому что glColor3f(1.0,1.0,1.0)), или его вообще не следует рисовать (в зависимости от положения вашей камеры и от того, включено или нет тестирование глубины).

Попробуйте нарисовать только первый квад, с правильно заданными координатами текстуры.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]