Ergebnis 1 bis 5 von 5

Thema: OpenGL Blending & Depth Test für volles 32-Bit Alpha-Blending

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #4
    Hab leider nicht viel Zeit und das Thema nur kurz überfolgen aber vlt hilfts ja:

    Zitat Zitat von Cornix Beitrag anzeigen
    Das wäre nun ein enormer Aufwand und nach meinem derzeitigen Verständnis der Depth-Funktion auch nicht im Sinne der Sache.
    Immerhin soll doch die Depth-Funktion dafür da sein, damit ich mich eben nicht darum kümmern muss die einzelnen Objekte nach ihrer Höhe zu sortieren sondern, dass die Grafikkarte dies übernehmen kann.
    Nicht unbedingt. Das ganze funktioniert nur so lange pixel entweder komplett transparent(können im fragment shader mit dem befehl "discard" verworfen werden) oder opak sind. Bei Zwischenwerten hast du das Problem, dass die pixelwerte zusammen geblendet werden müssen mit dem was bereits da ist. In so einem fall musst du nach dem "painters algorithm" rendern, d.h. von hinten nach vorne. Wenn du zuerst deine vorderen transparenten Objekte renderst und depth writing aktiviert ist, dann wird nachher kein fragment an der stelle mehr gerendert, wenn es sich weiter hinten befindet. Depth writing muss aber in den meisten fällen aktiviert sein, weil wir ja keine weiter entfernten Objekte über näher liegende Objekte zeichnen wollen.

    Eine simple und beim partikel rendern oft ausreichende Lösung ist es, zuerst alle opaken Objekte mit depth write und test zu rendern, und anschließend alle transparenten Objekte mit depth test aber ohne depth write.

    edit:
    Ok, ich seh du hast einen planeten und sterne und wahrsch. beide mit alpha zwischen 0 und 1. In dem Fall bleibt dir meines wissens nichts anderes über, als die Objekte nach distanz zu sortieren und von hinten (-z) nach vorne (+z) zu rendern. Das Problem ist einfach, dass du sonst in den depth buffer schreiben musst, wenn du den planeten renderst. Wenn du anschließend dahinter liegende Sterne renderst und sich die Sterne am Rand des Planeten befinden(wo der planet transparent ist), dann werden die Sterne an der Stelle garnicht gerendert, weil sie sich ja weiter hinten befinden. Wenn du aber nicht in den depth buffer schreibst und ohne sortierung renderst, dann würden nachfolgende Objekte drübergezeichnet werden, selbst wenn es sich um dahinterliegende Sterne handelt. Der Planet muss auserdem einen höheren z-wert haben, wenn er vor den Sternen gerendert werden soll. Je niedriger der z-wert, desto weiter weg.

    Oder du gehst einfach davon aus, dass Sterne Hintergrund sind. Du kannst den Hintergrund zuerst einfach ohne depth writing rendern. Dadurch bleibt der depth buffer unberührt und alles was du nachher renderst wird über den hintergrund drüber gerendert.

    Geändert von nudelsalat (17.10.2012 um 18:46 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •