Das Problem wurde gefixt. Es handelte sich um einen bescheuerten Tipfehler im Shader.
Zur Erklärung des Shadow Mappings allgemein, bitte besuche den Post der unten mehrfach erwähnt wird.
Shadow Mapping Implementierung
-
-
Du musst bei shadowCoordinate auch die Model-Matrix deines Objektes berücksichtigen (oder sind diese bereits im World-Space?):
shadowCoordinate = gl_TextureMatrix[1] * matModel * gl_Vertex;Entweder du lädst diese für jedes Objekt hoch oder du verwendest gl_ModelViewMatrix und berücksichtigst die inverse View-Matrix in der gl_TextureMatrix[1] um den View-Anteil aufzuheben (ist im gelinkten Thread beschrieben).
Außerdem würde ich eine aktuellere OpenGL Version verwenden, viele Methoden in deinem Source-Code sind in der OpenGL-Spec als deprecated markiert.
-
Entweder du lädst diese für jedes Objekt hoch oder du verwendest gl_ModelViewMatrix und berücksichtigst die inverse View-Matrix in der gl_TextureMatrix[1] um den View-Anteil aufzuheben.Aber die gl_TextureMatrix[1] wird bei mir doch durch: bias * shadow_projection * shadow_modelview berechnet, damit werden die Vertices doch direkt entsprechend transformiert.
Standart ist doch diese Gleichung: projection * view * model * vertex = projection * modelview * vertex
Schatten mit der inversen Matrix funktioniert so: shadow_projection * shadow_modelview * modelview^⁻1 * modelview * vertex
und das ist doch gleich: shadow_projection * shadow_modelview * vertex
was mein Code (plus den bias) doch berechnet, oder bin ich wirklich zu blöde ? -
Mit deinen Aussagen hast du recht aber die shadow_modelview Matrix ist für jedes Objekt (mit unterschiedlicher Model-Matrix) verschieden, du verwendest aber die gleiche ModelView Matrix beim ShadowMap-Lookup für alle Objekte.
Nach dem Erstellen der ShadowMap mit der Methode renderModelsQuick() holst du dir die ModelView-Matrix. Diese enhält entweder nur den View-Anteil (wenn du deine Matrix auf dem Matrix-Stack mit Push und Pop gesichert hast) oder den View-Anteil mit der Model Matrix des letzten gezeichneten Objekts.
Die Matrix gl_TextureMatrix[1] ist bei dir für jedes deiner Objekte gleich und verändert sich nicht mit der "Model-Matrix" der Objekte.Schau dir vielleicht noch einmal die Erklärung in diesem Post an.
Hoff du findest dich zurecht, diese Matrizen sind manchmal etwas verwirrend -
Erst einmal danke ich schon einmal für deine Hilfe. :thumb: Geschafft ist es aber noch nicht, denn ich habe nur ein Objekt, dass ist das Verrückte. Sprich, die Model-Matrix ist gleich.
Die cam.applyModelViewMatrix() Methode verschiebt nur mein Objekt, bzw erzeugt eine neue ModelViewMatrix für die Szene, abhängig von den Cameraeinstellungen.
CodeglLoadIdentity(); glRotatef(pitch, 1, 0, 0); glRotatef(yaw, 0, 1, 0); glRotatef(roll, 0, 0, 1); glTranslatef(-x, -y, -z);
Diese werden wie oben zu sehen in der renderShadow() überschrieben, die Kamera wird angepasst, die ShadowMap gerendert
-
Ich habe das Problem, texture2D(shadowMap,shadowCoordinate.st) im Frag Shader ist Müll. Da muss vorher durch den w-Anteil geteilt werden.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!