Hab mal eine Minimalanwendung geschrieben, welche das Problem reproduziert.
Der wesentliche Code ist hier zu kriegen:
http://pastebin.com/fHrtwXFf
In eine ausführbare Anwendung verpackt, die auf SFML
2 basiert:
http://dl.dropbox.com/u/8265828/RenderTargets/main.cpp
Zu linken ist das ganze gegen:
|
Quellcode
|
1
|
-lglut -lsfml-window -lGLEW
|
Würde mich sehr freuen, wenn jemand die Zeit findet, mal drüber zu schauen...
So sieht das ganze übrigens aus:
Hat auch vielleicht jemand eine Idee, woher diese seltsamen Verzerrungen kommen, die man im oberen Bilddrittel deutlich erkennt?
Edit // Nachtrag:
Wenn man die
Near-Clipping-Plane nach hinten setzt (von
0.1f auf
1.0f) und die
Far-Clipping-Plane nach vorne (von
100.f auf
50.f), schaut es so aus:
Man erkennt, da sind irgendwie "Stufeneffekte" drin. So als würden die Tiefenwerte aufs Härteste quantitisiert werden. Frage is nur - warum?? An der Präzision der Depthtexture kanns kaum liegen, die ist 24 bit. Außerdem sieht es mit 32 bit sieht exant genau so aus. Läge es an der Präzision der Depthtexture, müsste der Effekt mit 32 bit schwächer werden.
Ich könnte mir 2 Ursachen
vorstellen, aber nicht
erklären: Entweder die Genauigkeitsfehler entstehen, ...
1. weil die Projektionsmatrix irgendwie kaputtgeht und der Quotient aus
Near- und
Far-Clipping-Plane total übermenschliche Dimensionen erreicht
2. oder im Shader bei der Anweisung
"gl_FragDepth = depthtex.a". Findet hier nicht so etwas wie eine implizitite Umwandlung des Datentyps statt?