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
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:
uniform sampler2D depths;
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
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
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.