Ich habe eine 2 png Bilder, als Texturen in einer Qt/C++ 2D OpenGL-Anwendung verwendet. Der erste wird als eine Art "mittlerer" Grund verwendet und der zweite als ein "Objekt", das "ontop" gerendert wird (Anmerkung: sie alle haben den gleichen Z-Wert atm, ich bekomme das gewünschte Verhalten, rendere es in a definierte Reihenfolge). Die "Objekt" -Textur ist teilweise durchscheinend. Die "Mittelgrund" -Textur ist meist massiv. Das Problem ist, dass der durchscheinende Teil meiner "Objekt" -Textur die feste Hintergrundfarbe und nicht die "Mittelgrund" -Textur hat.OpenGL transluzente Textur über andere Textur
Irgendwelche Tipps, wie Sie dies erreichen?
Nach OpenGL falgs sind für meine Texturen verwendet
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 zu machen.
Edit:
Weitere 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 kann ich meine Textur laden und so weit ich es lädt es Kanal
mit alpha sagen kannQImage 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
Das Himmelsbild ist der "Mittelgrund", der Hintergrund ist schwarz.
Screenshots mit Erklärungen wäre nett. – SigTerm