Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Nachdem ich BeanMachine endlich fertig habe, wollte ich mir mal die Zeit holen und mich mal intensiver mit Stencilschatten auseinandersetzen, und arbeite nach dem Dokument "Practical and Robust Stenciled Shadow Volumes for Hardware-Accelerated Rendering" von Everitt und Kilgard.
Soweit funktioniert auch alles : Die Silhouetten werden korrekt generiert als auch extruhiert und im Falle von Z-Fail auch noch mit einem abschliessenden "Deckel" versehen. (Bis ich allerdings soweit war, hat's mich einiges an Kopfschmerzen gekostet, ganz schön heftig die Thematik)
Allerdings habe ich sobald ich Z-Fail Schatten nutze Darstellungsfehler, und zwar insofern als dass der Stempel vom "Ende" meines Schattenvolumens (weiss nicht wie ich es besser beschreiben soll, aber das ist wohl am treffensten) durch die Szene hindurch sichtbar ist. Ich poste am besten Screenshots auf denen man das erkennen kann :
(Klicken für größere Ansicht)
Links sieht man die Z-Pass Methode (mit Far-Clippingplane bei unendlich), bei der auch alles korrekt dargestellt wird (natürlich solange man sich nicht in einem Volumen befindet, aber dafür soll dann ja Z-Fail herhalten). Rechts hingegen sieht man deutlich oben beschriebenen Fehler, sobald ich auf Z-Fail umschalte. Allerdings mache ich da nicht wirklich viel anders, ausser die Stenciltests für Z-Fail einzuschalten :
Code:
Z-Pass :
glCullFace(GL_FRONT);
glStencilOp(GL_KEEP, GL_KEEP, GL_INCR_WRAP);
RenderVolume;
glCullFace(GL_BACK);
glStencilOp(GL_KEEP, GL_KEEP, GL_DECR_WRAP);
RenderVolume;
Z-Fail :
glCullFace(GL_FRONT);
glStencilOp(GL_KEEP, GL_INCR_WRAP, GL_KEEP);
RenderVolume;
glCullFace(GL_BACK);
glStencilOp(GL_KEEP, GL_DECR_WRAP, GL_KEEP);
RenderVolume;
Für Z-Fail benutze ich dann aber auch keine Farclipping-Plane bei Unendlich (darf man ja nicht, soweit ich das mitbekommen habe), ansonsten ändert sich jedoch nichts ggü. Z-Pass. Von daher kann ich mir auch absolut nicht erklären warum ich plötzlich Teile des Schattens durch meine Szene hindurch sehen kann. (Wie gesagt ändere ich auch sonst keine States ausser denen die oben erwähnt sind).
Für Z-Fail benutze ich dann aber auch keine Farclipping-Plane bei Unendlich (darf man ja nicht, soweit ich das mitbekommen habe).
Doch das ist erlaubt.
Bei ZFail muß man nicht nur den "Deckel" sondern auch die Fläche selber zeichnen, so daß das Volumen insgesammt abgeschlossen ist. Dabei muß man darauf achten, daß die Reihenfolge der Punkte im Deckel genau anders wie bei der Fläche ist.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Das heisst also im Endeffekt dass ich für Z-Fail-Schatten ein komplett geschlossenes Volumen brauche, wobei der vordere Deckel (also zum Licht hin) quasi dem Teil meines Objektes entspricht der von der Silhouette umschlossen wird, oder?
Und muss das auch dann sein, wenn ich für ein Objekt nur dann Z-Fail-Schatten rendere wenn sich der Betrachter in dessen Schattenvolumen befindet, oder kann ich mir dass dann sparen (tu mich mit der Thematik leider etwas schwer...)
Edit : Wenn ich mir diesen Artikel sorgsam durchgelesen hätte, wäre der Thread wohl überflüssig gewesen *grml*
Registriert: Do Mai 13, 2004 16:36 Beiträge: 116 Wohnort: Deutsch-Wagram (Österreich)
Äh...
eine Frage die jetzt nicht ganz passt, aber du hast erwähnt das du die Antwort kennst.
Wie mache ich denn eine unendliche Projektionsmatrix?
Danke im Voraus!
_________________ Diese Signatur ist defekt. Bitte wählen Sie die Numer 12846712894671893230917497617383216 (gültig ab 32.13.2671)
Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.