Die ganzen Matrizen solltest du eh besser auf der CPU ausrechnen und nur eine fertige, höchstens zwei auf der GPU berechnen. Denke daran: Die Grafikkarte muss den Shader für jeden Vertex bzw. Fragment ausführen! In der Regel hat man eine Kameramatrix und eine Modelmatrix. Die Modellmatrix transformiert die Vertices vom Modelspace(Dem Koordinatensystem eines Modells, also ein Teil der "Welt") in den Worldspace(Die globalen Koordinaten so wie alles tatsächlich im Raum angeordnet ist.). Die Kameramatrix bildet anschließend die Weltkoordinaten auf die Kameraebene ab.
Den Sinn von "meinMatrix", "LocalMatrix" habe ich nicht ganz verstanden. In der Praxis werden in den meisten zeitgemäßen Engines (zb. Unity) alle Objekte/Modelle in einen Scenegraph hierarchisch verwaltet. Ein Beispiel: (Ausgedacht und nicht total realistisch. Zb. bei den einzelnen Dachziegeln... Ist aber auch nur zur Veranschaulichung)
Code: Welt ├ Haus0 │ ├ Tür │ │ ├ Klinke │ │ └ Holz │ ├ Kamin │ │ └ Rauch │ ├ Betonwand │ └ Dach │ ├ Dachziegel0 │ ├ Dachziegel1 │ ├ Dachziegel2 │ ├ ... │ └ Dachziegel235 └ Haus1 ├ Fenster │ ├ Fensterrahmen │ └ Fensterscheibe ├ Kamin │ └ Rauch ├ Glaswand └ Flachdach
Die einzelnen Objekte in der Welt sind also in einer Baumartigen Datenstruktur abgelegt, wie die Dateien auf deiner Festplatte. Jedes der einzelnen Objekte hat eine Matrix und kann verschoben, rotiert, skaliert, geschert oder was auch immer werden. Um die Modelmatrix rauszubekommen um jetzt ein einzelnes beliebiges Objekt aus dem Scenegraph zu rendern, muss nun einfach die Matrix eines Objektes mit allen Matrizen der Elternelemente multipliziert werden. Man kann nun das Fenster von "Haus1" ganz einfach verschieben, in dem man die Matrix dieses einen Objektes verändert. Die "Bauteile" des Fensters, also das Modell des Fensterrahmens und der Fensterscheibe bewegen sich automatisch mit. Weil ich es nicht ganz verstanden habe, was du mit "MeinerMatrix" und "LocalMatrix" bezwecken willst, bin ich mir nicht ganz sicher, aber ich denke, du willst etwas umsetzen, das so ähnlich wie das funktioniert. Nur mal so nebenbei: "Denglisch" im Programmcode ist unübersichtlich.
|