Ich versuche, meiner OpenGL -Szene Schatten hinzuzufügen, indem ich eine Schattenkarte generiere und damit Schatten in meine Szene hinzufügen. Dann rendern Sie die Szene aus der Perspektive der Lichtquellenkamera und retten ihren Tiefenpuffer. Dann rendern Sie die Szene mit der tatsächlichen Kamera, die Sie die Szene anzeigen möchten, und geben Sie die lichtszene-Tiefen-Puffer als Textur weiter. Dann machen Sie im Shader einige Mathematik, um herauszufinden, wo jedes Fragment im Kamerahand im Lichtraum ist, und wenn der Tiefenpuffer einen Tiefenwert aufzeichnet, der niedriger ist als das fragliche Fragment, impliziert das Fragment, das von einem anderen Objekt aus dem Licht verstoßen wird, und es gibt daher im Schatten. /> [*] Wenn der Fragment-Shader die Position des Fragments in Weltkoordinaten hat, können Sie einfach die Transformation der Lichtkameras direkt auf das anwenden. So lightCoord = light_camera_perspektive * light_camera_view * worldcoord
Wenn der Fragment-Shader nicht das Fragment in der Weltkoordinaten hat, hat aber die Kamera und die Lichtspace-Camera. /> < /li>
< /ol>
Code: Select all
mat4x4 LIGHT = light_camera_perspective * light_camera_view;
mat4x4 CAMERA = camera_perspective * camera_view;
lightCoord = LIGHT * inverse(CAMERA) * fragCoord;
< /code>
In 1 oder 2 glaube ich, dass es eine kleine zusätzliche Normalisierung gibt, die erforderlich ist, um diese zu ordnungsgemäßen UV -Koordinaten für die Schattenkarte zu machen. Dies ist ein Teil, auf dem ich ein bisschen dunstig bin. Ich habe mein Bestes gegeben, unter Bezugnahme aus dem Tutorial und einigen seiner Kommentare. Es sieht so aus: Dies. Wenn ich Shadow_value = 1,0;
im Fragment -Shader manuell festgelegt habe, wird es wie erwartet (nur ein diffuser Renderpass) und sieht so aus,