Jump to content

Empfohlene Beiträge

Geschrieben

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:

  1. Zeile 3 - woher kommt der y-Wert 5.00000?
  2. Zeile 4 - woher kommen der x-Wert und der y-Wert?
  3. 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

Geschrieben

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

Geschrieben (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 von kdlamann

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...