OpenGL-transluzente textur über die andere textur

Bekam ich ein 2 png-Bilder, die als Texturen in ein Qt/C++ - 2D-OpenGL-Anwendung. Der erste dient als eine Art "mittlerer" Boden und die zweite wird als ein "Objekt" gerendert "ontop" (Hinweis: Sie haben alle den gleichen z-Wert atm, bekomme ich das gewünschte Verhalten zu sein, dass es in einer definierten Reihenfolge). Das "Objekt"-textur ist teilweise lichtdurchlässig. Den "middleground" textur ist meist solide.
Das problem ist, dass das lichtdurchlässige Teil von meinem "Objekt" textur macht die Hintergrundfarbe und nicht den "middleground" textur.

Irgendwelche Tipps, wie dies zu erreichen?

Folgenden OpenGL-falgs sind für meine Texturen Rendern

glEnable (GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Vielen Dank für jede Hilfe.

Edit:

Mehr code:

glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.1f);

glEnable(GL_TEXTURE_2D);
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBindTexture(GL_TEXTURE_2D, c->_texture);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

glBegin(GL_QUADS);
{
    glTexCoord2i(0,0);
    glVertex2i(-128,-128);

    glTexCoord2i(0,1);
    glVertex2i(-128,128);

    glTexCoord2i(1,1);
    glVertex2i(128,128);

    glTexCoord2i(1,0);
    glVertex2i(128,-128);

}
glEnd();

glDisable(GL_TEXTURE_2D);

glDisable(GL_ALPHA_TEST);
glDisable(GL_DEPTH_TEST);

Edit: Wie lade ich meine textur und soweit ich sagen kann, es lädt, es mit alpha-Kanal

QImage img("./images/dummycar.png","PNG");
QImage t(QGLWidget::convertToGLFormat(img));
glGenTextures(1, &_texture);
glBindTexture(GL_TEXTURE_2D, _texture);
glTexImage2D( GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits() );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

Screenshot: http://img824.imageshack.us/img824/1912/blackbox.png

Den Skyimage ist den "middleground", der hintergrund ist schwarz.

  • Screenshots mit Erklärungen wäre schön.
InformationsquelleAutor drahnr | 2010-07-02
Schreibe einen Kommentar