NetzUnity und Informatik-forum wurden zusammengelegt. Eine entsprechende Ankündigung wird demnächst noch folgen. Für 2025 ist hier einiges geplant! Bei Fragen bitte per DM an Maximilian Rupp wenden.
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
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.
Wie greifst du auf die Datenstruktur zu, über einen Index oder brauchst du nur das erste/letzte Element? Und wie fügst du Elemente in die Datenstruktur ein? Hoff ich hab die Anforderungen nicht ganz falsch verstanden, aber wenn du bei einem std::vector immer nur am Anfang oder am Ende einfügst, hättest du eine implizite Ordnung, über die Element-Speicheradresse könntest du damit für zwei Elemente auch die Reihenfolge auswerten.