Seiten eines Würfels nicht transparent? (OpenGL)



  • Hi Leute...
    Ich will mir gerade einen Würfel mit OpenGL zeichnen. Klappt auch alles, nur das
    die Seiten alle transparent sind. Die Farben der Seiten gebe ich alle über
    glColor4f an. Da gibt doch der 4. Parameter den Alpha-Wert an. Und wenn
    der 0 ist sollte das danach gezeichnete doch eigentlich nicht transparent sein,
    oder habe ich da irgendwas falsch verstanden? Jedenfalls kann ich an dem Alpha-
    Wert so viel rumdrehen wie ich will, es tritt keine Änderung auf. Aber wie
    regelt man die Transparenz denn nun? Macht man das mit dem Wert, und wenn ja,
    was mache ich dann falsch?

    Danke im vorraus...

    MFG Aoeke



  • Dann setz doch mal den 4. Parameter bei glColor4f auf 1.0.
    Ich nehm immer glColor3f und es funzt wunderbar.



  • Jedenfalls kann ich an dem Alphawert so viel rumdrehen wie ich will,
    es tritt keine Änderung auf.

    Soll heißen, dass ich da schon alles mögliche als Wert eingetragen habe.
    Mit glColor3f funzt es bei mir auch nicht, dann ist das auch transparent.
    Auch mit glColor4ub zum Beispiel kann ich alles mögliche als Wert eintragen,
    es geschieht keine Änderung...
    Weiß keiner woran das liegen kann?
    Hilfe...

    MFG Aoeke



  • hast du blending eingeschaltete? falls nicht dürfte glEnable(GL_BLEND) + glBlendFunc(...) dein problem lösen


  • Mod

    naja, wohl eher disable, weil er doch transparenz loswerten möchte 🙂

    rapso->greets();



  • Also, ich sehe drei mögliche Lösungen

    1.:

    Du zeichnest zuerst die Seiten des Würfels, die nicht transparent sind, und war mit GL_BLEND disabled
    Dann machst du glEnable(GL_BLEND) und zeichnest die transparenten seiten. Tataa...

    2.:

    Du machst GL_Blend an
    Nimmst glBlendFunc(GL_ONE, GL_ZERO), zeichnest alle nicht-transparenten sachen, benutzt dann z.B.: GL_BLEND_FUNC(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) und glColor4f(1.0, 1.0, 1.0, 0.5) um die transparenten Flächen zu zeichen.

    Aber ich weiss net, ob du GL_DEPTH_TEST dabei anhaben solltest, musst du halt ausprobieren, kann auch sein, dass du es bei den Transparenten Flächen deaktivieren musst

    3:
    du machst GL_BLEND an und benutzt dann GL_BLEND_FUNC(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
    die nicht transparenten Flächen zeichnest du dann mit glColor4f( 1.0, 1.0, 1.0, 1.0), und die transparenten zum Beispiel mit glColor4f( 1.0, 1.0, 1.0, 0.5);

    Ich bin mir dabei nicht ganz sicher, und habe es auch nicht ausprobiert, sollte aber funzen

    MfG Nero



  • Hi danke für eure Antworten. Nur irgendwas muss ich wohl falsch machen, ich
    habe jetzt alle drei Möglichkeiten von Nero ausprobiert, und es trat KEINE
    Änderung auf. Nicht die Stärke der Transparenz oder sonst was. Nichts hat
    sich verändert, als hätte ich alles so gelassen wie es war... 😞 Hat das mal
    jemand anderes probiert? Also ich habe mir einfach bloß ein Gitter gezeichnet,
    und dann eben diesen Würfel....
    Und es ist ja auch nicht alles gegenüber allem transparent. Das ist irgendwie
    so, dass die erste Seite transparent der 2. , 3. und 4. Seite ist. Die zweite
    ist transparent der 3. und 4. Seite, verdeckt aber die 1. Und so weiter....
    Also so, dass die 4. Seite halt alle vorherigen drei verdeckt. Und den Boden
    und das "Dach" habe ich noch nicht gezeichnet...
    Soll ich vielleicht mal den ganzen Code mit OpenGL Sachen zeigen?

    MFG Aoeke



  • Benutzt du Licht/glLight*?



  • Nee... Und sonst auch nur Standardsachen, wie sie halt in den OpenGL Tuts von
    GameTutorials.com benutzt werden. Also der ganze Initialisationskram ist
    eigentlich von GameTutorials.com, und sonst habe ich nur noch was mit
    GetKeyState drin und halt RenderScene() nen bissl verändert. Also so, dass er
    Gitter und Würfel zeichnet.

    MFG Aoeke



  • Hast du auch den Alpha Buffer gelöscht, bevor du die Scene renderst?
    An sonsten - der Depth Buffer könnte solche Effekte auch hervorrufen. Vorallem im Bezug auf Blending



  • Darstellung von Transparenzen

    -Falls mehrere transparente Objekte hintereinander
    vorkommen können:

    a) Zuerst alle nicht-transparenten Objekte zeichnen (Depth-
    Buffer on)

    b) Danach alle transparenten Objekte entlang der Blickrichtung
    sortieren

    c) Dann Depth-Buffer „ausschalten“ (Read-Only)

    d) Dann alle transparenten Objekte von hinten nach vorne
    rendern (Depth-Buffer aus).

    Dann sollte man keine Probleme haben mit dem falschen Objectblending.


Anmelden zum Antworten