Transparenz mit Masking



  • Hallo,
    ich möchte mit OpenGL ein 3D Spiel erstellen.
    Dafür stelle ich Wände von Räumen mit Texturen dar.
    Nun möchte ich in diese Wände beliebig Türe einsetzen, sprich Lücken lassen, also bestimmte Stellen zu 100 % transparent machen. Bislang habe ich derartige Probleme mit Masking gelöst, allerdings musste ich dafür die Farbtextur, also hier die Wände, an denen Stellen, wo Transparenz auftreten sollte schwarz färben.
    Wenn ich dies unterlasse wird die Farbtextur an jenen Stellen, wo die Masken-Textur weiß ist nicht 100 % transparent.
    Nun will ich die Farbtexturen aber vielfälltig verwenden und kann sie somit nicht vorfärben.
    Meine Frage ist nun, ob es eine Möglichkeit gibt Stellen einer Farbtextur nur in Abhängigkeit von der Masken-Textur zu sichtbar oder unsichtbar zu machen.

    Zur Orientierung mein bisheriger code

    glEnable(GL_BLEND);
    glDisable(GL_DEPTH_TEST);
    glBlendFunc(GL_DST_COLOR,GL_ZERO);
    glColor4f(1.0f,1.0f,1.0f1.0f);

    glBindTexture(GL_TEXTURE_2D, *m_TexturMask);

    glBegin(GL_QUADS);
    ...
    glEnd();

    glBlendFunc(GL_ONE, GL_ONE);
    glBindTexture(GL_TEXTURE_2D, *m_FarbTextur);
    glBegin(GL_QUADS);
    ...
    glEnd();

    glDisable(GL_BLEND);
    glEnable(GL_DEPTH_TEST);

    Vielen Dank für eure Hilfe.



  • Ich würde die polygone so anpassen, dass an besagter Stelle einfach eine Lücke ist.
    Macht später auch die kollisionserkennung usw wesentlich einfacher oO



  • Also Du multiplizierst jetzt die "Tuer-Maske" (alles ausser der Tuer wird schwarz) und addierst die Wandtextur wieder rein (da wo "Tuer" ist muss schwarz sein).

    Eine Alternative waere:
    Benutze MultiTexturing und verwende die "Tuer-Maske" als Alpha-Wert.
    Aktiviere den Alpha-Test (nicht Blending) um die "Tuer-Pixel" erst gar nicht zu zeichnen.


Anmelden zum Antworten