ShadowMapping 1.Pass
-
Hallo,
Ich versuche gerade ShadowMapping mit OpenGL und GLSL umzusetzen und komme nicht weiter.Beim 1.Renderpass, rendere ich die Szene in einen FBO mit ColorAttachment Texture, aus sicht der Lichtquelle
(Color anstatt DepthComponent einfach um mir im 2. Rendervorgang die resultierende Textur ausgeben lassen zu können)
Ich habe jetzt einige Varianten für die Ermittlung der Tiefe ausprobiert und ich bekomme
entweder einen komplett weißen oder komplett schwarzen "Abdruck" meiner Szene.
Oder einen Grauverlauf, der allerdings statisch ist je nachdem welche Achse ich angebe (statisch=absolut, also nicht relativ zur Kamera)
(Welcher dann aber auch Fragmente anzeigt die eigentlich von anderen Fragmenten weiter hinten verdeckt sein sollten.)Die Shadowmap sollte aber eigentlich ein Grauverlauf aus sicht der Kamera sein und somit die Tiefe der fragments relativ zur Kamera wiedergeben, sofern ich das richtig verstanden habe.
Und das zu erreichen ist im Moment mein Problem.Ich habe eben schon einige Shader varianten ausprobiert, aber eine der ersten war:
FragmentShader:void main(){ float depth = world_position.z / world_position.w; //depth = depth*0.5 + 0.5; fragColor = vec4(depth,depth,depth,1.0); }
VertexShader
void main(){ world_position =perspective * view *model * vertex; gl_Position=world_position; }
Wobei perspective und view Attribute der Lichtquelle sind. Damit bekomme ich einen weißen "Abdruck" (Umriss der einfach weiß gefüllt ist) meiner Szene.
Ich würde mich sehr über Tipps und Lösungsvorschläge freuen.
MfG
-
Wenn du dir die Depth-Texture ausgeben lässt, dann müsste das Bild weiß sein!
Wenn das Objekt schon ein paar Meter von der Kamera entfernt ist sieht man es schon oft nicht mehr, es ist aber denoch in der Depth-Texture enthalten!Was mich wundert:
"Beim 1.Renderpass, rendere ich die Szene in einen FBO mit ColorAttachment Texture, aus sicht der Lichtquelle (Color anstatt DepthComponent)"?? Fürs ShadowMapping benötigst du doch gerade die Depth Sachen und nicht Color...