Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Zweiter Teil: Der Rotor
Jetzt wirds natürlich spannend. Was machen wir mit dem Rotor? Der bewegt sich im Augenblick nicht.
Lösung: Wir behandeln den Rotor wie ein Gelenk - ein "Bone". Bitte erinnere Dich an das untransformierte Flugzeugmodell.
Die bequemste Möglichkeit, so etwas zu lösen ist, die Transformation des Motors VOR ALLEN ANDEREN Transformationen durchzuführen. Bequem deshalb, weil man dann als RotationsAchse immer die Z-Achse verwenden kann und das Gelenk bleibt auch immer am selben Fleck, nur der Winkel ändert sich.
In diesem Fall hast Du den Rotor des untransformierten Modells vor Dir. Der Gelenkpunkt kann bestimmt werden, indem man einen Punkt als Mittelwert aller Rotor-Punkte rechnet. Die Rotationsmatrix für den Rotor setzt sich so zusammen: alle RotorVertices müssen mit dem Gelenkpunkt-Vektor in den Ursprung verschoben werden, dort rotiert und dann wieder zurückverschoben. DANN kann die Rotationsmatrix des Rotors mit der Rotationsmatrix des Flugzeugs multipliziert werden, denn schließlich muss der Rotor ja alle Eskapaden des Flugzeugs mitmachen. WICHTIG: die Reihenfolge der Multiplikation, denn schliesslich mussen die Rotorblätter eben vor allen anderen Transformatonenen durchgeführt werden. Es muss heißen:
Kombinierte Rotormatrix = Flugzeug.Matrix X Rotor.Matrix
Einziger Nachteil des ganzen: Die Rotor-Vertices müssen eine eigene Transformationsmatrix, nämlich die obige kombinierte Rotormatrix haben. Das ist aber nicht zu vermeiden; bei Bones ist das immer so.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Dritter und letzter Teil: Die Kamera und die Projektion
Unser aktueller Stand ist: das Flugzeug hebt grade ab und der Rotor dreht sich, Wir kommen aber nicht wirklich in den Genuss, das ganze auch überblicken zu können. Wir haben das Flugzeug noch immer im Koordinatenursprung zusammen mit unserer Kamera.
Ich muss gestehen, dss ich eine wirklich ausgefuchste kamera noch nicht installiert habe. Bones mache ich mit meinem Modeller schon, aber meine Kamera ist ziemlich primitiv. Sie hat 6 Ansichten: von vorne, von hinten, links, rechts, oben, unten. Ich habe sie allerdings auch mit dem "persönlichen" Koordinatensystem ausgestattet. Zum Unterschied vom Objekt invertiert die Kamera aber alle Transformationen: wenn ich ihr sage: Geh nach Position X/Y/Z, dann geht sie in Wirklichkeit nach -X/-Y/-Z, und wenn ich sage: Rotiere um die Achse X/Y/Z im Uhrzeigersinn, dann rotiert sie in Wirklichkeit im Gegenuhrzeigersinn, aber sie behelligt mich nicht damit.
Deshalb sage ich jetzt meiner Kamera: weiche um 20 Einheiten zurück, damit ich das Flugzeug sehen kann. Im Klartext heißt das, sie soll ihren Z-Wert von Null auf +20 setzen (aus dem Bildschirm heraus, also zurück). In Wirklichkeit aber erzeugt sie eine Verschiebung um -20 nach vorn, in den Bildschirm hinein und die Matrix verschiebt daher alle Vertices des Flugzeuges in den Z-Minus-Bereich, hinein ins Frustum, sodass ich es sehen kann. Denn die "Kamera" bewegt sich ja in Wirklichkeit gar nicht.
Nunmehr fast zu Ende, gibt es noch eine letzte Matrix, die wir auch noch brauchen: die Projektionsmatrix. Und weil ich Deine Geduld nicht überstrapazieren will, sag ich bloß: damit klatsche ich das Objekt bloss auf die XY-Ebene und mache es platt.
Die OpenGL-Transformation hat dann noch die Viewport-Transformation, aber die schenk ich mir jetzt.
Die wirkliche Reihenfolge nochmal:
1) Zuerst kommt der Rotor dran, aber mit einer vorher berechneten kombinierten Matrix aus Flugzeugmatrix und Rotormatrix, die sicherstellt, dass innerhalb der Matrix der Rotor als erstes transformiert wird.
2) Rein grundsätzlich könnte man auch den Rotor mit seiner eigenen Matrix behandeln und dann das gesamte Flugzeug inklusive Rotor mit der Flugzeugmatrix. Wenn wir aber vorher die kombinierte Matrix verwendet haben (das ist natürlich die schnellere Methode), dann kommt jetzt das restliche Flugzeug dran mit seiner (mehr oder weniger) komplizierten Matrix.
3) Dann kommt die Kamera dran, die alles andere transformiert. Anders ausgedrückt: die Kameramatrix muss auf alle Objekte angewendet werden.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.