Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 24, 2025 00:45

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2003 00:10 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jun 07, 2003 23:50
Beiträge: 1
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?

thx 4 help
Psi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2003 08:25 
Offline
DGL Member
Benutzeravatar

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...

hoffe geholfen zu haben ;)

Fiji-Fighter

_________________
. . .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2003 10:29 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Mai 31, 2003 23:59
Beiträge: 42
versuchs mal damit:

glDepthMask(False);

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++ ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2003 11:51 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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).

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 09, 2003 00:30 
Offline
DGL Member
Benutzeravatar

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...

-lith

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]