Klartexter Geschrieben vor 17 Stunden Geschrieben vor 17 Stunden Ich beschäftige mich schon eine ganze Weile mit diesem Thema, aber so richtig weitergekommen bin ich bisher damit nicht. Mir ist das so richtig bewusst geworden, als ich mich mit einer Animation für eine Rolltreppe beschäftigt habe. @kdlamann war so freundlich und hat mir eine skp-Datei nebst der x-Datei inklusive Animation zur Verfügung gestellt. Mir helfen solche Dateien, um Vorgänge besser zu verstehen. Aber bei der Animationsdatei wurde mir bewusst, dass ich wenig über die Ermittlung der Werte weiß. Bei meiner Suche nach Informationen hier im Forum bin ich auch auf diesen Beitrag von @BahnLand aufmerksam: Die dort angebotene Hilfedatei hat mir zumindest schon bestätigt, dass ich bei meiner Suche nach den Werten richtig lag. Auch die AnimationKey-Typen sind mir bereits bekannt, aber dann ist ziemlich Ende Gelände angesagt. Ich versuche mal, mein Problem näher zu erklären, deshalb hier mal eine Animationsdatei als Beispiel: ----------------------------------------------- Die Datenquelle ------------------------------------------------ Frame Treppe { FrameTransformMatrix { 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 5.500000, 0.000000, 1.000000;; } # <frametransformmatrix> ------------------------------------------------ Hier die Animationsdatei ------------------------------------------------ Animation { { Treppe } AnimationKey { 2; 3; 0;3;0.00000,5.00000,0.00000;;, 1;3;20.00000,15.00000,0.00000;;, 2;3;40.00000,25.00000,0.00000;;; } Wie man unschwer erkennen kann, findet sich keine einzige Übereinstimmung bei den Werten. Also frage ich jetzt einfach mal in die Runde, woher kommen diese Werte im AnimationsKey: Zeile 3 - woher kommt der y-Wert 5.00000? Zeile 4 - woher kommen der x-Wert und der y-Wert? Zeile 5 - woher kommen der x-Wert und der y-Wert? Wenn ich @BahnLands Hilfedatei richtig verstanden habe, dann bezeichnen die Zeilen 3 bis 5 die Werte Rotation (Zeile 3), Scale (Zeile 4) und Position (Zeile 5). Aber woher bekomme ich die Werte, bzw. wie kann ich sie ermitteln? Mathematische Formeln wie Sinus oder Cosinus helfen mir da wenig, weil ich damit keine Ahnung habe, besser wären Tipps, was ich wo im Taschenrechner (Wissenschaftlich) eingeben muss. @Goetz hat mir ja vor längerer Zeit schon den Tipp gegeben, dass ich in Windows bereits so ein Modul habe. Bisher bin ich davon ausgegangen, dass ich, wenn ich etwas bewegen will, die Positions-Koordinaten aus der FrameTransformMatrix in Zeile 3 des AnimationsKey eintrage, und dann die Werte entsprechend der Bewegung dann ändere. Ich habe das bisher mit der Methode Versuch macht kluch ermittelt, weil mir andere Wege nicht bekannt sind. Bisher hat das auch immer funktioniert, auch wenn es zugegeben recht zeitaufwendig war. Aber ich will auch verstehen, warum etwas passiert, und nicht einfach eine Lösung, die jemand anders gefunden hat, kopieren. Deshalb würde es mich freuen, wenn ihr mir mit Tipps weiterhelfen könntet. In diesem Sinne wünsche ich euch jetzt noch einen schönen Abend. Walter
BahnLand Geschrieben vor 14 Stunden Geschrieben vor 14 Stunden Hallo Walter, wenn ich für ein Bauteil eines Modells eine Animation definiere, lege ich meistens die Postion den Bauteils in der skp-Datei als Ausgangsposition für die Animation fest. Damit kann ich dann die Koordinaten aus der 4. Zeile der FrameTransformmatrix (im obigen Beispiel die Werte x=0. z=5,5 und y=0) direkt als Ausgangsdaten (Zustand 0 im AnimationKey) übernehmen. Bei der x-Datei von @kdlamann, aus der das oben aufgeführte Beispiel stammt, scheint die Ausgangsposition der Animation nicht mit der Position des Bauteils "Treppe" übereinzustimmen. Denn hier ist als z-Koordinate es Ausgangszustands 0 nicht der z-Wert 5,5 aus der FrameTransformMatrix, sondern der Wert 5,0 eingetragen. Die Animation des Bauteils "Treppe" beginnt also an einer anderen Position als im skp-Modell verbaut. Die Werte x=20 und z=15 im Zustand 1 sowie x=40 und y=25 im Zustand 2 des AnimationKeys zeigen die Koordinaten an, an die das Bauteil im Zwischenzustand 1 und Endzustand 2 der Animation verschoben werden soll. Durch diese Werte wurde also der Animationsweg für das Bauteil "Treppe" von @kdlamann festgelegt. Beachte bitte, dass die Reihenfolge im amerikanischen Koordinatensystem, nachdem sich die DirectX-Syntax richtet, "x,z,y" ist. Die y- und z-Koordinate sind also gegenüber dem deutschen Koordinatensystem vertauscht. Grundsätzlich besteht die FrameTransformMatrix aus Rotationskoordinaten (Matrixzeilen 1-3) und Positionskoordinaten (Matrixzeile 4) welche die Verdrehung des Bauteils (Frames) und seine Position (die Position von dessen lokalem Nullpunkt) relativ zur übergeordneten Baugruppe des Modells (dem übergeordneten Frame) definieren. Für eine Verschiebungs-Animation (AnimationKey-Typ 2=Position) ist hierbei nur die 4. Zeile (Positionskoordinaten) relevant. Animierte Skalierungen und Rotationen (AnimationKey-Typen 1 und 0) greifen nicht auf Informationen aus der FrameTransformMatrix zurück. Viele Grüße BahnLand
kdlamann Geschrieben vor 1 Stunde Geschrieben vor 1 Stunde (bearbeitet) vor 13 Stunden schrieb BahnLand: Bei der x-Datei von kdlamann Hallo! mittlerweile (11.7.25 um 12:06 Uhr) hat mir Walter geschrieben, wo etwas schief gelaufen ist. Zur Ergänzung hier Auszüge aus der Original-Datei: Frame Treppe { FrameTransformMatrix { 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 80.000000, 5.000000, -40.000000, 1.000000;; } # <frametransformmatrix> und AnimTicksPerSecond { 1; } AnimationSet Rollen{ Animation { { Treppe } AnimationKey { 2; 2; 1;3;120.00000,5.00000,-40.00000;;, 2;3;160.00000,25.00000,-40.00000;;; } } Animation { { StufeUnten } AnimationKey { 1; 2; 1;3;1.00000,0.00000,1.00000;;, 2;3;1.00000,1.00000,1.00000;;; } AnimationKey { 2; 2; 1;3;80.00000,5.00000,-40.00000;;, 2;3;120.00000,5.00000,-40.00000;;; } } Das ist die Datei, welche für die funktionierende Rolltreppe im Katalog verwendet wurde. Viele Grüße kdlamann Bearbeitet vor 1 Stunde von kdlamann
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden