1

テクスチャをシェーダーに渡して使用しようとしています...しかし、最も簡単な方法でもそれを使用しようとするたびに、ブラックボックスが表示され、時には白になります-私が彼に置いたテクスチャによって異なります..どういうわけか....

ウィッチが動作するはずのコードフラグメントは次のとおりです(簡単にするためにラッパーを削除しました):

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

1 に答える 1

1

プロウがコメントで言っているように、これはテクスチャ座標が設定されていないことに関係していると思います。2 番目のクワッドのテクスチャ座標のみを設定しています。2 番目のクワッドもシェーダー プログラムで描画されておらず、最初のクワッドとまったく同じ座標でglColor3f(1.0,1.0,1.0)描画されています。カメラの位置と深度テストが有効かどうか)。

テクスチャ座標を適切に設定して、最初のクワッドのみを描画してみてください。

于 2013-01-08T01:03:00.497 に答える