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

Aktuelle Zeit: Di Jun 04, 2024 02:59

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Fragen zum Tiefenpuffer
BeitragVerfasst: Mi Dez 26, 2012 21:07 
Offline
DGL Member

Registriert: So Dez 23, 2012 21:45
Beiträge: 9
Programmiersprache: Freepascal
Code:
  1.  
  2.   glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );
  3.   glEnable(GL_DEPTH_TEST);
  4.   glDepthFunc(GL_LEQUAL); // glDepthFunc(GL_LESS oder GL_EQUAL)
  5.   glLoadIdentity();
  6.   glMatrixMode(GL_PROJECTION);
  7.   glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT,0, 0, 128);
  8.  
  9.   .. (draw..!)

Ich benutze glOrtho() für 2D Darstellung und habe drei Fragen zum Tiefenpuffer:

1. mit den oben angegebenen Werten -> wie muss ich die Z-Werte vergeben und wie wird damit sortiert ?
2. in einem alten Beitrag habe ich gelesen, das bei "glDepthFunc(GL_LEQUAL);" die Objekte nacheinander
sortiert werden, so wie sie gezeichnet wurden (heißt für mich: ich könnte alle Objekte mit Z=0 nacheinander zeichnen, in der gewünschten Reihenfolge).
3.
aus http://wiki.delphigl.com/index.php/Tiefentest:
Zitat:
Transparenz und Tiefentest

Sobald Transparenz verwendet wird, kann der Tiefentest zumindest für diese Teile nicht mehr benutzt werden. Dies würde zu Fehlern führen, da das transparente Fragment ggfs. das durchscheinende, jedoch erst später an die Grafik-Pipeline gesendete und somit vom Tiefentest verworfene Fragment dahinter völlig verbirgt. Wenn man Transparente Fragmente nicht in den Tiefenbuffer schreibt, so können diese Fragmente von anderen, eigentlich weiter hinten liegenden, Fragmenten komplett überschrieben werden.
Aus diesem Grund sollten Transparente Objekte nach allen anderen Objekten an OpenGL geschickt werden und diese möglichst von hinten nach vorne sortiert sein. Das Sortieren kann durch einen Alpha Wert im Framebuffer umgangen werden, jedoch ist dieser nur selten in Hardware vorhanden, wodurch in den weit langsameren Softwaremodus gewechselt wird

Wie ist der Stand der Technik ? Sollte man das beherzigen und auf Kompatiblität setzen beim programmieren oder sich einfach nicht darum kümmern ? Wie finde ich heraus ob meine Grafikkarte das hardwaremäßig unterstützt ?

Viele Grüße !
Tobias
:)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen zum Tiefenpuffer
BeitragVerfasst: Do Dez 27, 2012 07:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
dropkicktobi hat geschrieben:
1. mit den oben angegebenen Werten -> wie muss ich die Z-Werte vergeben und wie wird damit sortiert ?

Von zFar ("hinten") nach zNear ("vorne"), wenn du also renderst dann von hinten nach vorne. Sprich Objekte die näher an zFar (128) liegen werden von Objekten die näher an zNear (0) liegen überdeckt.

dropkicktobi hat geschrieben:
2. in einem alten Beitrag habe ich gelesen, das bei "glDepthFunc(GL_LEQUAL);" die Objekte nacheinander
sortiert werden, so wie sie gezeichnet wurden (heißt für mich: ich könnte alle Objekte mit Z=0 nacheinander zeichnen, in der gewünschten Reihenfolge).

LEQUAL steht für LESS or EQUAL. Also ja, deine Aussage trifft hier (teilweise) zu. Wenn du hier nacheinander zwei Objekte an der gleichen Z-Position renderst wird dass zuletzt gezeichnete dass erste überdecken. Allerdings muss man hier je nach Auflösung und Spannweite des Tiefenpuffers auch die Ungenauigkeit in betracht ziehen, Sprichwort Depthfighting. Aber wenn man eh eine Z-Reichweite definiert, sollte man diese auch nutzen statt immer auf Z=0 zu zeichnen.

dropkicktobi hat geschrieben:
3.
aus http://wiki.delphigl.com/index.php/Tiefentest:...
Wie ist der Stand der Technik ? Sollte man das beherzigen und auf Kompatiblität setzen beim programmieren oder sich einfach nicht darum kümmern ? Wie finde ich heraus ob meine Grafikkarte das hardwaremäßig unterstützt ?

Das ist grundlegende Funktionalität (aktueller) 3D-Hardware. Lässt man mal Shader ausser Acht verhält sich eine GPU von 2002 genauso wie eine von 2012. Wenn man korrekte Transparenz haben will dann muss man immer vorsortieren, es sei denn man benutzt spezielle Techniken wie z.B. Depth Peeling (wobei sowas eher bei komplett transparenten 3D-Objekten Sinn macht). Sprich wenn du willst dass sich deine transparenten Objekte korrekt überlappen (also ein transparentes Objekt dass hinter einem anderen liegt auch dahinter gezeichnet wird und nicht durch den Tiefentest verworfen wird) musst du hier vorsortieren. In 2D geht das aber zum Glück sehr einfach und auch ohne große Rechenleistung. Idealerweise sortiert man das Objekt hier dann aber direkt beim Erstellen richtig ein. Abfragen kann man hier also hardwaretechnisch nicht, es ist so "by-design". Liegt daran dass der Tiefenpuffer bei transparenten Objekten genauso arbeitet wie bei jenen die nicht transparent sind und Tiefeninformationen schreibt. Wenn man dann danach und dahinter ein weiteres transparentes Objekt zeichnen will sind an der entsprechenden Stelle bereits Tiefeinformationen vorhanden und die Fragmente werden durch den Tiefentest verworfen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen zum Tiefenpuffer
BeitragVerfasst: Do Dez 27, 2012 17:01 
Offline
DGL Member

Registriert: So Dez 23, 2012 21:45
Beiträge: 9
Programmiersprache: Freepascal
Vielen Dank für die ausführliche Antwort ! :)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 20 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.024s | 14 Queries | GZIP : On ]