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

Aktuelle Zeit: Sa Jul 12, 2025 09:51

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



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frage zu Tiefentexturen
BeitragVerfasst: Do Feb 12, 2009 13:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Hiho,

ich mehre hier grad an einem Beispiel zu Deferred Shading rum und hab da mal eine Frage zu Tiefentexturen. Erstmal etwas "Vorgeschichte".
Es wird ein FBO genutzt. An dieses werden 3 Farb-Texturen und eine Tiefentextur (mit GL_DEPTH_COMPONENT) rangehangen.

Die Tiefentextur wird nur für den z-Test benutzt. In der 3. Farbtextur speichert der Autor den z-Wert aus dem Einheitswürfel (also der Bereich [-1;1]) und zwar mit

Code:
  1. float depthVal = depthPos.x / depthPos.y;
  2. gl_FragData[2] = vec4(depthVal, depthVal, depthVal, depthVal);


So nun fand ich das sinnlos. Da ja die DEPTH_TEXTURE eh vorhanden ist, kann man doch diese nutzen.
Also habe ich die Textur auf 32-Bit Tiefe gesetzt, die 3. Farbtextur entfernt und setz die DEPTH_TEXTURE als Textur für die Tiefenwerte im Deferred Shader.
Sooo grundsätzlich scheint das zu gehen, das Bild sieht meines erachtens nach gleich aus. Aber folgende Fragen/Annahmen hätte ich gern bestätigt, falls sich da jemand gut auskennt.

Die z-Werte werden doch in der Textur im Bereich [0;1] gespeichert. Im Fragmentshader durch die Transformation ist doch aber der Bereich [-1;1] gültig.
Wenn man mit GL_DEPTH_COMPONENT-texturen und Shadow mapping arbeitet, wird die Textur im Shader als uniform sampler2DShadow; definiert und mit shadow2DProj drauf zugegriffen.
Ich mache das momentan einfach so:

Code:
  1. uniform sampler2D depths;
  2.  
  3. float depthVal = texture2D(depths, texCoords).r;  


Erkennt der das, dass das ersten ein 32 Bit Wert sein soll und nicht nur die 8 Bit für das rot, also sprich erkennt er dass das eine Tiefentextur ist und zweites: macht er die Umrechnung des Bereichs von 0..1 auf -1..1 automatisch? Momentan scheint es bei mir so. Kann ja aber auch sein, das ist in dem Bsp gerade Zufall.


MfG Pellaeon

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 12, 2009 16:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Erkennt der das, dass das ersten ein 32 Bit Wert sein soll und nicht nur die 8 Bit für das rot, also sprich erkennt er dass das eine Tiefentextur

Sofern das interne Datenformat der Textur entsprechend gesetzt ist, dann ja.

Zitat:
macht er die Umrechnung des Bereichs von 0..1 auf -1..1 automatisch?

Nach dem Pixelshader werden die geschriebenen Farbwerte auf den Bereich 0...1 beschränkt, also abgeschnitten. Wenn ich mich recht erinnere kann man diesen Teil der Pipeline auch irgendwie umgehen indem man im Pixelshader eigene "varying out" definiert und dem Framebufferobject diese zuweist. Ich glaube das geht aber erst ab ShaderModel 4.0.
Wenn du den Tiefenwert aber mit gl_FragDepth ausliest, sollte der aber bereits zwischen 0 und 1 liegen. Sicher bin ich mir da aber nicht, schau doch einfach mal in die Spezifikation :)

_________________
Yeah! :mrgreen:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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 ]