OpenGL - Alpha



  • Hi!

    - Bisher habe ich den Alphawert eines kompletten Meshs nur über die Alphawerte aller Vertices festlegen können. Gibt es eine Möglichkeit noch einen Alphawert für nachfolgende Zeichenoperationen festzulegen? Also so das ich ein komplettes Objekt mit Alpha zeichnen kann, wobei der Vertex-Alpha-Wert zusätzlich mit verrechnet wird? Like: Dest. = Alphavalue * Vertexalpha

    - Wie mus man konkret vorgehen, wenn man Objekte mit Alpha richtig darstellen will?

    - Ersteinmal alle Objekte zeichnen, die keinen Alphawert haben
    - Alphaobjekte auf der Z Achse sortieren
    - Depth-Test ausschalten
    - Depthbuffer auf readonly setzen
    - Lighting deaktivieren
    - Alphaobjekte sortiert von "hinten" nach "vorne" einzeichnen
    - Lighting aktivieren
    - Depthbuffer auf read and write setzen
    - Depth-Test aktivieren

    Ist das so korrekt? Wie sieht dann mit Texturen aus? Wird Alpha aller Texel mit Alpha von Vertex verrechnet?

    mfg olli



  • Der Depthtest muss aktiviert bleiben, sonst hätte ja z-read keinen Sinn und die Alphaobjekte liegen auf allem anderen drauf.

    Wie Alpha verrechnet wird, hängt von den Rdenderstates ab.

    Bye, TGGC (Wähle deine Helden)



  • Hi!
    OK, danke! Jetzt ist mir aber noch nicht klar, warum unbedingt Lighting ausgeschalten werden muss. Letzendlich will ich doch das Resultat mit Gouraud-Shading sehen, und nicht unschattiert. Weiter müsste ich ja nicht unbedingt den Depthbuffer auf readonly setzen ?oder Ich meine die hinteren Objekte sind korrekt drin. Dann kommen die Alphaobjekte selber sortiert mit aktiven Depthbuffer was ebenfalls korrekt aussieht. Dann die vorne liegenden Objekte, bei denen praktisch jeder Depthtest mit den Alphaobjekten immer richtig ist.

    Weiter hätte ich noch Fragen zu glBlendFunc. Funktioniert ja so:
    Zu zeichnenden Fragmente * Sourcefaktor +
    Vorhandenen Fragmente im Colorbuffer * Destiationfaktor = Zu zeichnende Fragmente

    Wenn ich ein Objekt additionional zum Colorbuffer renden will, nehme ich GL_SRC_ALPHA, GL_ONE. Was müsste ich nehmen, wenn ich den durschnitt bilden will?
    Also: (Sourcecolor+Destinationcolor)/2 = zu zeichnende Fragmente

    mfg olli



  • Vertex schrieb:

    Dann kommen die Alphaobjekte selber sortiert mit aktiven Depthbuffer was ebenfalls korrekt aussieht. Dann die vorne liegenden Objekte, bei denen praktisch jeder Depthtest mit den Alphaobjekten immer richtig ist.

    Sind die denn auf Dreieckebene sortiert?

    Bye, TGGC (Wähle deine Helden)



  • Nöö.

    Es geht um das Verständnis, warum man nicht im Depthbuffer schreiben sollte bei Alphaobjekten. Sehe da keinen logischen Zusammenhang.

    mfg olli



  • Weil sonst vordere Tris hintere Tris überdecken könnten.

    Bye, TGGC (Wähle deine Helden)


Anmelden zum Antworten