Textur mit alpha Kanal funktioniert nicht in opengl
Wie kann ich ein Bild mit alpha-Kanal? Da habe ich nun so probiert:
glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGBA,
width, height,
0,
GL_BGRA,
GL_UNSIGNED_BYTE,
bits);
mit diesem opengl-Befehl:
glBindTexture(GL_TEXTURE_2D, texgun5);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3f(gun5[0], gun5[1], gun5[2]);
glTexCoord2f(1.0, 0.0);
glVertex3f(gun5[3], gun5[4], gun5[5]);
glTexCoord2f(1.0, 1.0);
glVertex3f(gun5[6], gun5[7], gun5[8]);
glTexCoord2f(0.0, 1.0);
glVertex3f(gun5[9], gun5[10], gun5[11]);
glEnd();
glDisable(GL_BLEND);
Ich bin mit einem png-Bild geladen mit Freeimage, aber das trasparent pixel sind alle schwarz, wo ist der Fehler???
Sie wird den Aufruf glEnable(GL_ALPHA); irgendwo während Ihrer Initialisierung.
Dein code sieht absolut in Ordnung. Der Fehler muss woanders sein.
Dein code sieht absolut in Ordnung. Der Fehler muss woanders sein.
InformationsquelleAutor Luca | 2013-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass Sie vergessen haben, geben mischen in den textur-Umgebung. Legen Sie diese direkt nach dem glTexParameteri Aufrufe:
Blick auf die online-docs, sieht aus wie es sein sollte GL_DECAL eher als GL_BLEND. Geändert, meine Antwort zu reflektieren.
vielen Dank für deine Hilfe, aber jetzt ist die trasparent Pixel sind weiß statt schwarz.
InformationsquelleAutor Drew Hall
Transparente Pixel sind weiß, weil die Farbe, die Sie angegeben haben, ist weiß. Nach
GL_DECAL
Referenz mitRGBA
format der Formel, die angewendet wird, hier istCp * (1- As) + Cs*As
Jetzt, wenn die textur komplett transparent ist IhreAs
wird0
führt zum endgültigen Farbwert gleichCp
die Farbe des Quad(weiß).Ich denke, in diesem Fall sollten Sie alpha für Ihr quad auf null mit
glColor4f(1.0f, 1.0f, 1.0f, 0.0f)
Natürlich viel Zeit vergangen, seit dein Kommentar, aber vielleicht hilft es dem nächsten Kerl. Ich hatte auf GL_MODULATE statt GL_DECAL, diese zu arbeiten. Mit GL_DECAL, es war schwarz oder weiß, wie Sie beschrieben, abhängig von der aktuellen Farbe. Ich habe nicht zu aktivieren, GL_ALPHA.
InformationsquelleAutor Abhishek Bansal
Sind die Texturen richtig geladen, aber nicht angezeigt. Verwenden
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
stattglTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
wenn das nicht reicht, versuchen Sie
glDepthMask(GL_FALSE);
zu sehen, wenn Sie mindestens die alpha-Werte. Wenn das nicht genug ist, versuchen Siein deiner init-Funktion
InformationsquelleAutor LMD