Wie kann man eine Bitmap-Farbe ausblenden(openGL)?



  • Hallo Programmierer,
    ich habe folgendes Problem: 😞
    Ich möchte z.B. ein Bild mit (Rot,Blau-Grüner Ball auf schwarzem Hintergrund),
    auf einen unregelmäßigen Hintergrund rendern.
    Wie kann ich nur die Farbe schwarz von meinem Bild entfernen?

    Folgenden Code habe ich probiert. Der macht aber auch den Ball transparent:
    glColor4f(1.0f,1.0f,1.0f,0.5f);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE);
    glEnable(GL_BLEND);
    Kann man das irgendwie machen?
    Vielen Dank.

    Schöne Grüße

    Heike



  • Ich wuerde das Bild in eine RBGA-Textur, also eine mit Alphakanal umwandeln, so dass alle Pixel mit rgb=(0,0,0) einen Alphawert von 0 bekommen, und 1 sonst.

    Wenn Du die Textur dann malst, kann du alle Pixel mit Alphawerten gleich Null uebergehen:

    glEnable(GL_ALPHA_TEST);
    glAlphaFunc(GL_GREATER, 0.0f);
    // textur zeichnen
    glDisable(GL_ALPHA_TEST);
    

    OpenGL sagen, dass es RGB-Pixel mit (0,0,0) nicht zeichnen soll, kann man meines Wissens nicht. Dazu braucht es immer einen Alphakanal.

    -Gunnar



  • Hallo Gunnar,
    erst mal vielen Dank für Deine schnelle Hilfe.
    Wie kann ich den Farbwert jetzt übergehen?
    Ich habe folgenden code

    glEnable(GL_ALPHA_TEST);
    glAlphaFunc(GL_GREATER, 0.0f);
    // textur zeichnen

    glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 1.0f);
    glVertex3f(-1, 1, 0);

    Schöne Grüße
    Heike



  • heike2 schrieb:

    Wie kann ich den Farbwert jetzt übergehen?

    Welchen? Und wie übergehen?

    Bye, TGGC \-/



  • heike2 schrieb:

    Wie kann ich den Farbwert jetzt übergehen?

    Wie er schon sagte im Paint-Programm Deiner Wahl einstellen! 👍



  • Damit das hinhaut brauchst du:

    Pixelformat-Descriptor mit Farbformat RGBA (32Bit)
    Textur mit Format RGBA.
    Alpha Test enabled
    Die entsprechene Alpha-Func

    Wenn du ein 24Bit Bildformat verwendest (Bitmap beispielsweise) musst du den Alpha-Kanal manuell hinzufügen. Beim Laden der Textur erzeugst du dafür einen neuen Textur-Buffer mit jeweils einem Byte mehr pro Pixel. Dann kopierst du die ursprünglichen Pixel-Daten in diesen Buffer. Und zwar im Format RGBARGBARGBA usw...
    Für 'A' setzt du jeweils den Wert '0' wenn R + G + B == 0 sind. An sonsten setzt du 'A' auf 255. Damit sollte dein Code da oben hinhauen.

    (edit)
    Selbstverständlich musst beim erzeugen der Textur bei glTexImage2D anstatt GL_RGB, GL_RGBA übergeben 😉



  • 😋 Vielen Dank nochmal an alle,
    es hat geklappt mit der Farbausblendung.

    Schöne Grüße

    Heike


Anmelden zum Antworten