Und zwar geht es um die Tatsache, daß bei OpenGL alles ja nacheinander in den ScreenBuffer geschrieben wird (wie auch sonst :unsure:).
Dabei habe ich folgendes Problem festgestellt:
Man stelle sich einen Würfel vor, bestehend aus 6 Seiten, alle den gleiche Alpha- Wert von, sagen wir, 0.5). Dann sollte man annehmen, man habe einen halbtransparenten Würfel vor sich. Das haut eigentlich ganz gut hin, solange man die Seite anschaut, die ZULETZT gezeichnet wurde. BlendMode ist (GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA)
Dreht man diesen Würfel nun rum, sieht es so aus, als sei der Würfel undurchsichtig, man sieht also seine übrigen Seiten net mehr.
Der Grund: Man hat nun die Seite vor sich, die ZUERST gezeichnet wurde. Alle weiteren Seiten würden nun zwar normalerweise durch die Transparez erscheinen, jedoch verhindert der depth-buffer, daß die übrigen Seiten überhaupt erscheinen, denn der Depth Buffer läßt nur das zu, was direkt sichtbar ist, und nicht durch schon im Buffer vorhandene Objekte verdeckt wird.
Würde ich auf den Deth Buffer verzichten, gäbe es Probleme beim Anzeigen von Objekten, deren Alpha Wert 1 ist.
Wie ist das zu lösen, ohne, daß ich immer den Depthbuffer an- und ausschalten muss?
Registriert: Sa Jan 04, 2003 21:23 Beiträge: 674 Wohnort: Köln
was spricht denn dagegen den depthpuffer an und abzuschalten?
mach halt einen Zeichnungsblock mit den Blending-Polys und einen mit den normalen... dann ist nur ein umschalten nötig, denk ich mal...
ansonsten sieht es aber auch so aus, als wenn die hintere Seite vorne wäre, wenn der depthpuffer aus ist und die hintere als letztes gezeichnet wirft ->es hilft IMO nur alles "von Hand" selebr zu sortieren...
wurde hier erwähnt: <a href='http://www.phobeus.de/hosting/dgl/forum/index.php?act=ST&f=2&t=1163' target='_blank'>http://www.phobeus.de/hosting/dgl/forum/in...t=ST&f=2&t=1163</a>
_________________ "OpenGL verbindet"<br>- für die Völkerverständigung zwischen Delphi und C++ ^^
Wenn du den Depth Buffer unbedingt brauchst und du die Flächen nicht sortieren kannst/willst, kannst du bei einem konvexen Objekt (wie einem Würfel) auch zuerst die Rückseiten zeichnen und dann erst die Vorderseiten. Das machst du, indem du mittels glFrontface erst die im Uhrzeigersinn orientierten Polygone darstellst, dann die gegen den Urzeigersinn orientierten - und jeweils das ganze Objekt zeichnest. Der Vorteil dieser Methode ist, dass du das Objekt als Ganzes betrachten kannst (z.B. falls es in einer Displayliste abgelegt ist).
Registriert: Mo Mai 06, 2002 20:27 Beiträge: 479 Wohnort: Bremen
Es macht im allgemeinen Sinn alle festen Objekte zuerst zu zeichnen und danach den Tiefenbuffer auszuschalten um die anderen Objekte mit aktiviertem Blending zu zeichnen. Leider geht das nur zufriedenstellend bei additivem Blending bei dem es egal ist, ob zuerst A auf B addiert wird oder zuerst B auf A. Wenn du wirkliche Transparenz haben willst musst du den Tiefenpuffer ausschalten und gleichzeitig sicherstellen das die Objekte/Polygone trotzdem in der richtigen Reihenfolge gezeichnet werden. Z.b. bei Partikelsystemen deren Billboards sich ja nie kreuzen funktioniert eine manuelle Tiefensortierung ganz gut. (Ein O(n log n) Algorithmus wie z.b. Mergesort braucht hier bis ca 1000 Partikel nicht nennenswert lange)
An echte Grenzen stößt du (könnte ich mir vorstellen - hatte das Prob noch nicht) wenn sich Objekte/Polygone überschneiden. Polygon A also sowohl vor als auch hinter B liegt. Ob's dafür noch ne einfach Lösung gibt weiß ich nicht...
Mitglieder in diesem Forum: 0 Mitglieder und 41 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.