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
Geschrieben

Erst einmal herzlichen Dank an @kdlamann und @BahnLand für euere Informationen. Aber ich bin offenbar zu dumm, um die zu begreifen, denn meine erstellte Rolltreppe ähnelt in der Animation eher einem Flakgeschütz als einer Rolltreppe. Ihr könnt euch das gerne unter BD90CA7B-6ECE-45C7-9CCB-5901FFDA8977 mal ansehen. Egal, wo ich die Daten aus der FrameTransformMatrix eintrage, entweder bohrt sich die Treppe in den Boden oder sie schießt in die Luft. Das Modell ist ja in H0 abgespeichert, deshalb habe ich die jeweils vierte Zeile der Frames als Datenbasis in die Animationsdatei übernommen. Aber damit komme ich nicht viel weiter, weil mir einfach die Kenntnisse fehlen, wie man Animationen berechnet. Inzwischen ist bei mir so viel Frust aufgebaut - auch über meine scheinbare Begriffsstutzigkeit - dass ich am liebsten den Kram hinwerfen würde. Wenn Blender einfacher zu bedienen wäre, dann wäre das vielleicht die bessere Lösung, denn da erledigt das Programm die Animationen. Aber mit fast 75 Jahren will ich nicht noch ein weiteres Programm erlernen. Und für Sketchup fehlt so ein Tool, denn nicht jeder ist mit solchen Berechnungen vertraut, ich auf jeden Fall nicht. Dann beschränke ich mich eben künftig auf nicht animierte Modelle oder ich lasse es gleich ganz sein. In diesem Sinne wünsche ich euch trotzdem einen schönen Restsonntag.

Euer gefrusteter Walter

 

Rolltreppe.zip

Geschrieben

Hallo Walter,

es wundert mich schon ein bisschen, dass Du bei der Rolltreppe so große Schwierigkeiten hast. Denn bei Deinen Trambahnen hast Du die Animation der Schwenkschiebetüren ja auch ohne diese Probleme hinbekommen. Prinzipiell ist beim Umrechnen der Ausgangsgrößen in der Sketchup-Datei (skp-Datei) in die Maße der x-Datei (Übergabe-Datei für das Modellbahn-Studio) zu beachten, dass das Modellbahn-Studio dann, wenn kein Scale-Objekt mit Maßstabsangabe vorgefunden wird, alle Maße in "cm" interpretiert. Die Maßeinheit im Sketchup-DirectX-Exporter ist jedoch "mm", weil ich in Sketchup die Erfahrung gemacht habe, dass ich mit Maßeinheit "mm" die Maße in Sketchup am genauesten festlegen (und auch ablesen) kann, und ich deshalb diese Maßeinheit auch in den Sketchup-DirectX-Exporter übernommen habe.

Bei den automatisch generierten Maßen in der x-Datei wird dies vom Sketchup-DirectX-Exporter berücksichtigt, sodass die Maße beim Modellbahn-Studio korrekt ankommen. Bei der AnimationSet-Definition, die vom Sketchup-DirectX-Exporter leider nicht automatisch generiert werden kann (es gibt keine entsprechenden Informationen seitens des Sketchup-Modells), muss man den an das Modellbahn-Studio übergebenden Maßstab und die Maßeinheit dazu selbst berücksichtigen. Die ist allerdings nur bei Verschiebungen (AnimationKey 2 = "Position") notwendig weil bei den anderen AnimationKeys (1 = Scale, 0 = Rotation) keine Positions-Koordinaten verwendet werden.

Wenn Du nun in einer Animation die Position eines Objekts verändern möchtest, verwendest Du zunächst die in der FrameTransformMatrix hinterlegte Postion als "Anhaltspunkt". Bei mir ist dies in den meisten Fällen die Ausgangsposition der Animation. Für die von dieser Position abweichenden Positionen (die Zielposition und möglicherweise auch die Ausgangsposition, wenn nicht mit der Position in der FrameTransformMatrix übereinstimmend) müssen dann die Verschiebungs-Distanzen für jede Koordinaten-Richtung im Sketchup-Modell abgegriffen und in Distanzen im Maßstab der x-Datei (leider händisch mit Taschenrechner-Funktion) umgerechnet werden.

Im vorliegenden Beispiel wurde das Sketchup-Modell im Maßstab 1:1 (Originalgröße in den Export-Einstellungen) gebaut und in der x-Datei im Maßstab 1:87 (Zielgröße in den Export-Einstellungen) mit der Maßeinheit "cm" erzeugt. D.h. alle Distanzen, die Du in der AnimationSet-Defintion der x-Datei benötigst, müssen ebenfalls im Maßstab 1:87 mit Maßeinheit "cm" hinterlegt sein. Wenn Du nun im Sketchup-Modell eine Distanz "n mm" abgegriffen hast, sind dies im Maßstab 1:87 "n/87 mm" oder "n*0,1/87 cm" = "n/870 cm" (1 mm = 0,1 cm). Du musst also die in Sketchup im mm abgegriffenen Distanz-Maße für die Verwendung in der x-Datei durch 870 dividieren. Solltest Du die Maße im Sketchup-Modell dagegen beispielsweise in "m" abgreifen, dann wären die "n m" des Sketchup-Modells in 1:87 "n/87 m" oder "n*100/87 cm" = "n/0,87 cm" (1 m = 100 cm). In diesem Fall müsstest Du die abgegriffenen Sketchup-Distanzen für die x-Datein durch 0,87 dividieren.

Um bei der Rolltreppe die korrekten Verschiebungs-Distanzen ausrechnen zu können, muss man diese allerdings im skp-Modell abgreifen können. Ohne diese Verschiebungsdifferenzen ist es nicht möglich, diese in der AnimationSet-Definition korrekt anzugeben.

Viele Grüße
BahnLand

Geschrieben
vor 3 Stunden schrieb BahnLand:

Prinzipiell ist beim Umrechnen der Ausgangsgrößen in der Sketchup-Datei (skp-Datei) in die Maße der x-Datei (Übergabe-Datei für das Modellbahn-Studio) zu beachten, dass das Modellbahn-Studio dann, wenn kein Scale-Objekt mit Maßstabsangabe vorgefunden wird, alle Maße in "cm" interpretiert. Die Maßeinheit im Sketchup-DirectX-Exporter ist jedoch "mm", weil ich in Sketchup die Erfahrung gemacht habe, dass ich mit Maßeinheit "mm" die Maße in Sketchup am genauesten festlegen (und auch ablesen) kann, und ich deshalb diese Maßeinheit auch in den Sketchup-DirectX-Exporter übernommen habe.

Hallo @BahnLand,

nachdem ich auch heute stundenlang alles mögliche versucht habe, dass die Animation funktioniert, bin ich nun durch Deine Aussage völlig verwirrt. Meine Einstellungen in Sketchup und im Sketchup-DirectX-Exporter sehen so aus:

sk2.jpg.293d8e36eaf90de191335277406b8558.jpg  sk1.jpg.09875f6378d2c42e92f5fde3b4162421.jpg

Die x-Datei hat diesen Eintrag:

Frame _Scale_1_87 { }    # leerer Frame - nur der Name ist wichtig !!! 

Somit sollte doch eigentlich die ideale Voraussetzung für eine Animation gegeben sein. Denn bei den von Dir erwähnten Trambahnmodellen musste ich ja nicht die Werte umrechnen, da konnte ich auf die Angaben im jeweiligen Frame zurückgreifen. In der Vorlage von @kdlamann hatte ich festgestellt, dass die x-Werte im AnimationKey Treppe und TreppeUnten vertikal gespiegelt sind.

        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;;;
     }

   }
        Animation {
          { TreppeUnten}

AnimationKey  {
     2;
     3;
     0;3;-40.00000,5.00000,0.00000;;,
     1;3;-20.00000,5.00000,0.00000;;,
     2;3;0.00000,5.00000,0.00000;;;
     }

Das kann vielleicht nur Zufall sein, aber die für mich wesentliche Information ist im z-Bereich des Frames Treppe. Denn dort ist offensichtlich die "Fahrt" der Rolltreppe beschrieben. Allerdings ändern sich auch die Werte des x-Bereichs. Solche Beispieldateien erleichtern mir das verstehen, aber ich muss dann trotzdem die Werte für das eigene Modell verwenden. Und der sieht bei der Treppe dann doch völlig anders aus als in der Beispieldatei:

  Frame Treppe01 { 
   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, 
    6.812556, -3.742137, 0.001177, 1.000000;; 
   }    # <frametransformmatrix>

Wenn ich von der Beispieldatei ausgehe, dann müsste ich beim x-Wert also in Zeile 2 den 20-fachen Wert und in Zeile 3 den 40-fachen Wert eintragen. Das selbe gilt dann auch für den z-Wert, der ist in Zeile 2 der dreifache Wert und in Zeile 3 der fünffache Wert aus Zeile 1. Aber das funktioniert so nicht, weil da ein Denkfehler von mir drin ist.

vor 4 Stunden schrieb BahnLand:

Um bei der Rolltreppe die korrekten Verschiebungs-Distanzen ausrechnen zu können, muss man diese allerdings im skp-Modell abgreifen können. Ohne diese Verschiebungsdifferenzen ist es nicht möglich, diese in der AnimationSet-Definition korrekt anzugeben.

Ist das damit gemeint?

sk3.jpg.9acb4b0a32aedca14a30e66b4921f1be.jpg

Auf jeden Fall erst einmal herzlichen Dank für Deine Tipps und Unterstützung, Du kannst Dir gerne die skp-Datei ansehen. Für heute ist jetzt erst einmal Entspannung angesagt, mir raucht der Kopf. Und morgen stehen wieder ein paar auswärtige Termine an bevor ich mich wieder mit dem Problem beschäftigen kann. In diesem Sinne noch einen schönen Abend.

Walter

Rolltreppe.zip

Geschrieben

Hallo Walter,

vergiss das letzte Bild. Das hat mit der Positionsverschiebung der Rolltreppen-Teile überhaupt nichts zu tun (im Bild geht es um Rotationen um eine beliebige Drehachse im Raum).

vor 2 Stunden schrieb Klartexter:

Denn bei den von Dir erwähnten Trambahnmodellen musste ich ja nicht die Werte umrechnen, da konnte ich auf die Angaben im jeweiligen Frame zurückgreifen.

Das ist nur zum Teil richtig. Du konntest zwar die Startkoordinaten der Tür-Animationen direkt aus der jeweiligen FrameTransformMatrix übernehmen. Die Weglängen der Türen beim Öffnen und Schließen musstest Du aber auch schon bei Deinen Trams selbst berechnen und zu den Startkoordinaten hinzu addieren, um die Zielkoordinaten der Bewegungsanimationen zu bekommen.

01Rolltreppe(skp).JPG.f7ca86657e732d8da7dbad32fa36fdc1.JPG

Das obige Bild stammt zwar noch aus der SKP-Datei von @kdlamann. Es lässt sich aber auch auf Deine skp-Datei übertragen, indem Du die Werte 0,40 m und 0,20 m durch 400 mm und 200 mm ersetzt. Das schwarze Teil ist das Bauteil (die Gruppe oder der Frame) "Treppe", die weißen Teile sind die Bauteile "TreppeOben" und "TreppeUnten". Die Maße der Stufen sind überall identisch. Die Bewegung der Rolltreppe kommt zustande, indem man in einem Animationszyklus das schwarze Bauteil um 400 mm nach rechts (in x-Richtung) und um 200 mm nach oben (in z-Richtung) sowie die weißen Bauteile jeweils nur um 400 mm nach rechts verschiebt.

AnimTicksPerSecond {
1;
}

AnimationSet Rollen{   //  Stufenbreite = 0,40 m = 400 mm = 87 * 0,459770 cm
                       //  Stufenhöhe   = 0,20 m = 200 mm = 87 * 0,229885 cm
  Animation {                     
  { Treppe }                      
    AnimationKey  {
      2; // Position
      2; 
      0; 3; -4.770115, 0.063218, 0.000000;;,  // Start:  aus FrameTransformMatrix
      1; 3; -4.310345, 0.293103, 0.000000;;;  // Ziel:   x+0.459770, z+0.229885, y unverändert
    }
  }

  Animation {
  { TreppeUnten}
    AnimationKey  {
      2; // Position
      2; 
      0; 3; -5.229885, 0.063218, 0.000000;;,  // Start:  aus FrameTransformMatrix
      1; 3; -4.770115, 0.063218, 0.000000;;;  // Ziel:   x+0.459770, z und y unverändert 
    }
    AnimationKey  {
      1;  // Scale
      2;
      0; 3; 1.00000,0.00000,1.00000;;,
      1; 3; 1.00000,1.00000,1.00000;;;
    }
  }

  Animation {
  { TreppeOben }
    AnimationKey  {
      2; // Position
      2; 
      0; 3; 3.965517, 4.431034, 0.000000;;,  // Start:  aus FrameTransformMatrix
      1; 3; 4.425287, 4.431034, 0.000000;;;  // Ziel:   x+0.459770, z und y unverändert
    }
  }
}

Der Code-Abschnitt oben ist die korrekte AnimationSet-Definition dazu, wobei man auf die mittleren Zustände in der originalen AnimationSet-Definition verzichten kann, da die Bewegung jeweils linear ist. Ganz oben habe ich im Kommentar die Originalmaße der einzelnen Stufe sowohl mit der Maßeinheit m (0,4 und 0,2) als auch mit der Maßeinheit mm (400 und 200) abgelegt. Wie in meinem letzten Beitrag beschrieben, musst Du die in mm abgegriffenen Stufenmaße bei der Maßeinheit mm im 1:1-skp-Modell durch 870 dividieren, um deren Größe im Maßstab 1:87 und der Maßeinheit cm zu erhalten. Das sind dann 0,459770 cm Länge und 0,229885 cm Höhe für eine Stufe.

Als Startwerte der einzelnen Verschiebungs-Animationen nimmst Du die Werte aus der 4. Koordinatenzeile der jeweiligen FrameTransformMatrix her (wie bei Deinen Trams). Für die Verschiebung der Stufen in der Animation musst Du nun ,um die jeweiligen Zielkoordinaten zu bekommen, die Stufenlänge und (beim Bauteil "Treppe") die Stufenhöhe (also die Werte 0,459770 cm und 0,229885 cm) hinzu addieren (der AnimationKey vom Typ Scale für das Bauteil "TreppeUnten" bleibt hiervon unberührt). Und schon funktioniert Deine Animation wie gewünscht.

Das Modell hat jedoch einen kleinen (unschädlichen) Schönheitsfehler: Das Bauteil "Treppe" ist eigentlich eine Stufe zu kurz (am unteren Ende fehlt eine). Deshalb wird das Bauteil "TreppeUnten" benötigt, bei dem zusätzlich der AnimationKey vom Typ Scale erforderlich ist. 

02Rolltreppe(skp).thumb.JPG.5593e74bf896976d78653149839e0b65.JPG

Fügt man beim Bauteil "Treppe" jedoch unten eine Stufe hinzu, ohne die Null-Ebene zu verändern (die Oberseite dieser Stufe befindet sich dann auf Höhe 0), kann man auf das Bauteil "TreppeUnten" komplett verzichten, sodass auch der AnimationKey vom Typ Scale verschwindet. Hierdurch verändern sich dann zwar teilweise die Koordinaten in den verbliebenen FrameTransformMaztrix-Definitionen. An der Übernahme von deren 4. Zeile als Startkoordinaten und dem Hinzufügen der oben aufgeführten Stufenlänge und Stufenbreite in 1:87 mit Maßeinheit cm ändert sich dadurch aber nichts.

Die AnimationSet-Definition reduziert sich hiermit auf

AnimTicksPerSecond {
1;
}

AnimationSet Rollen{   //  Stufenbreite = 0,40 m = 400 mm = 87 * 0,459770 cm
                       //  Stufenhöhe   = 0,20 m = 200 mm = 87 * 0,229885 cm
  Animation {                     
  { Treppe }                      
    AnimationKey  {
      2; // Position
      2; 
      0; 3; -4.770115, 0.229885, 0.000000;;,  // Start:  aus FrameTransformMatrix
      1; 3; -4.310345, 0.459770, 0.000000;;;  // Ziel:   x+0.459770, z+0.229885, y unverändert
    }
  }

  Animation {
  { TreppeOben }
    AnimationKey  {
      2; // Position
      2; 
      0; 3; 3.965517, 4.597701, 0.000000;;,  // Start:  aus FrameTransformMatrix
      1; 3; 4.425287, 4.597701, 0.000000;;;  // Ziel:   x+0.459770, z und y unverändert
    }
  }
}

Dass in der Animation der Rolltreppe im Modellbahn-Studio die scheinbar horizontale Bewegung der unten "horizontal eingeschobenen" Stufe immer noch vorhanden ist, liegt daran, dass am Boden der Rolltreppe die Stufe noch als Ebene vorhanden ist, die automatisch erscheint, wenn sich die unterste Stufe des Bauteils "Treppe" in der Animation nach rechts und oben weg bewegt.

Ich hoffe, dass ich damit deine "Verwirrung" wieder etwas abmildern kann.

Viele Grüße
BahnLand

Geschrieben

Herzlichen Dank, @BahnLand, für Deine ausführliche Beschreibung, die ist genau das, was ich meinte. Denn nun ist mir verständlich geworden, wie ich die Verschiebung berechnen kann, ich werde das heute nachmittag mal probieren, wenn mich meine jetzigen Termine nicht zu sehr schaffen. Nur noch eine Verständnisfrage vorab: In Deiner Erklärung fährt die Treppe nach oben, wenn sie abwärts fährt, dann muss ich die Stufenbreite und Höhe aus der 4. Koordinatenzeile der jeweiligen FrameTransformMatrix abziehen. Ist das richtig? Einstweilen wünsche ich nun einen schönen Tag, auf mich wartet ein stressiger Vormittag.

Walter

Geschrieben

Hallo Walter,

vor 1 Stunde schrieb Klartexter:

In Deiner Erklärung fährt die Treppe nach oben, wenn sie abwärts fährt, dann muss ich die Stufenbreite und Höhe aus der 4. Koordinatenzeile der jeweiligen FrameTransformMatrix abziehen. Ist das richtig?

der Gedanke ist im Prinzip schon naheliegend und auch nicht ganz falsch. d.h. um sich in die entgegengesetzte Richtung zu bewegen (also in die negative x- und z-Richtung), muss die Stufenlänge und Stufenhöhe vom Ausgangspunkt der Animation abgezogen werden. Doch stelle Dir die Bewegung einer Animationsschleife gedanklich vor: Die Treppe wird bei der Aufwärtsfahrt von links unten nach rechts oben (das obere Bauteil "TreppeOben" nur nach rechts) bewegt, wobei der Startpunkt sich links (unten) befindet. Wenn Du nun die Treppe vom selben  Startpunkt aus nach links (unten) bewegen würdest, würde sie aus der Verankerung gerissen. Vielmehr möchtest Du ja die Treppe bei de Abwärtsfahrt von rechts oben nach links unten (das obere Bauteil nur nach links) fahren lassen. Also muss der Startpunkt rechts (oben) und der Zielpunkt links (unten) liegen. Du musst also die Start- und Ziel-Koordinaten in den AnimationKeys genau vertauschen (der Startpunkt ist jetzt um eine Stufendistanz gegenüber den Koordinaten aus den FrameTransformMatrix-Definitionen verschoben, welche nun im Zielpunkt definieren).

So kompliziert musst Du es aber nicht machen. Lasse die Animation für die Abwärtsbewegung der Treppe einfach rückwärts laufen. Dann hast Du Dein Ziel auch erreicht. Dies ist übrigens beim Vorbild auch nicht anders. Die Konstruktion beider Rolltreppen (Aufwärts- und Abwärtstreppe) ist identisch. Nur läuft eine Treppe im Vorwärtsgang und die andere im Rückwärtsgang. Deshalb lässt sich bei der Wartung der einen Treppe die andere gegebenenfalls in die andere Richtung "umschalten". In München gibt es vor allem in den kleineren U-Bahnhöfen jeweils nur eine Rolltreppe, die sich, wenn kein Verkehr ist, im Ruhezustand befindet. Betritt nun ein Fußgänger die Treppe von oben oder unten (die Trittplatten am Zugang zur Treppe sind "Schalter"), so läuft die Treppe in die richtige Richtung los - und bleibt auch wieder stehen, nachdem der letzte (gleichzeitige) Nutzer  die Treppe wieder verlassen hat.

Viele Grüße
BahnLand

Geschrieben
vor 9 Stunden schrieb BahnLand:

Das Modell hat jedoch einen kleinen (unschädlichen) Schönheitsfehler: Das Bauteil "Treppe" ist eigentlich eine Stufe zu kurz (am unteren Ende fehlt eine). Deshalb wird das Bauteil "TreppeUnten" benötigt, bei dem zusätzlich der AnimationKey vom Typ Scale erforderlich ist. 

Hallo!

Bei einer Rolltreppe läuft die unterste Stufe erst waagerecht, um das "Einsteigen" zu erleichtern und die oberste Stufe ebenfalls waagerecht, um das "Aussteigen" zu erleichtern. Daher ist die eigentliche Treppe nicht zu kurz und "TreppeUnten" notwendig.

Viele Grüße

kdlamann

Geschrieben

Hallo @kdlamann,

das Prinzip ist mir schon klar. Natürlich gibt es in der Realität auch noch die untere Treppenstufe, die erst horizontal einläuft, bevor sich die Richtung nach schräg oben verändert.

11Rolltreppe(Kldlamann).thumb.JPG.244b2587f93ada83a40130a48a9acd0a.JPG
Orignallösung

Die hast Du aber selbst ebenfalls nicht realisiert! Denn Dein Bauteil "TreppeUnten" ist die Stufe, die ich in meinem zweiten Lösungsvorschlag an das Bauteil "Treppe" links unten angefügt habe, nur dass Du, anstatt die Stufe insgesamt nach schräg oben zu bewegen, hier deren Höhe am Anfang auf "0%" reduziert hast und diese, während die Stufe horizontal nach rechts bewegt wird, auf die Höhe "100%" aufziehst. Die Oberfläche dieser Stufe "TreppeUnten" vollzieht also exakt jene Bewegung, welche die neue unterste Stufe meines Vorschlags und damit das gesamte Bauteil "Treppe" vollzieht. 

13Rolltreppe(HMH).thumb.JPG.b143112a563bfb39972f5b719d27f3f5.JPG
Vorgeschlagene Lösung

Die von Dir genannte unterste Treppenstufe, die sich zuerst um einen Animationszyklus nur nach rechts bewegt, müsste eine zusätzliche Treppenstufe auf dem Niveau der neuen untersten Stufe von "Treppe" sein, die sich eine Stufenlänge weiter links befindet und sich dann tatsächlich nur nach rechts bewegt. Diese benötigst Du in Deinem SKP-Modell aber nicht, da Du hier eine ebene Platte mit den Treppenstufen-Rillen platziert hast, die genau diesen Zweck erfüllt (von mir ungeschickterweise im oberen Bild als "Rillenplatte" und im unteren Bild als "Untere Plattform" bezeichnet - ich wollte es aber nicht mehr ändern).

12Rillenplatte.thumb.JPG.a7a779c64026796e31fab28ba6db54a5.JPG

Blendet man in Deinem Modell das rechte Geländer aus, wird diese "Rillenplatte" oder "Untere Plattorm" sichtbar. Und diese "suggeriert" das horizontale "Einschieben" der zusätzlichen unteren Treppenstufe, wenn sich "Dein" Bauteil "TreppeUnten" oder "meine" neue unterste Treppenstufe des Bauteils "Treppe" nach rechts oben bewegt und damit den Blick auf die "Rillenplatte" oder "Plattform" frei gibt.

RolltreppeBL.zip

Das obige zip-Paket enthält die skp-Datei, die x-Datei und das fertige mbe-Modell zu meinem Vorschlag. Damit kannst Du nachvollziehen, dass die Rolltreppe korrekt funktioniert, auch wenn die aus der Trittrampe hervor geschobene (horizontal einschwebende) Rolltreppen-Stufe im Modell nicht existiert. Die aus den FrameTransformMatrix-Definitionen übernommenen Start-Koordinaten haben sich übrigens noch einmal geändert, weil ich ein globales _AP-Objekt hinzugefügt habe, um das Koordinatenkreuz auf der bisherigen Ebene beizubehalten (die Rolltreppe wäre sonst beim Aufsetzen auf die Anlagenplatte zu hoch positoniert gewesen und auf die Unterkante der zusätzlichen Rolltreppen-Stufe, die nach unten heraus ragt, aufgesessen).

Viele Grüße
BahnLand

Geschrieben (bearbeitet)

Hallo @BahnLand,

natürlich kann man die Animation so gestalten, wie Du es gemacht hast. Der Unterschied ist folgender (beide Rolltreppen im gleichen Bewegungszustand, rechts Deine):

a.thumb.jpg.6ce36a357409603f7324ae07e04f40bd.jpg

Nun kann man sagen, das ist Korintenkackerei, dass die unterste Stufe nicht nach unten durchhängen soll. Aber das kommt dann auf die Anwendung an und außerdem - im Forum wurde schon über ganz andere Details diskutiert. Im Grunde ist es Geschmackssache, aber ganz gewiss kein "Schönheitsfehler", wenn die untere Stufe nicht periodisch nach unten herausragt.

Viele Grüße

kdlamann

 

Bearbeitet von kdlamann
Geschrieben

Hallo @kdlamann,

anscheinend habe ich Dich mit dem "Schönheitsfehler" vor den Kopf gestoßen, was ich so nicht wollte. Was ich damit ausdrücken wollte, war eigentlich nur, dass man die AnimationSet-Definition durch Einbeziehen des Bauteils "TreppeUnten" in das Bauteil "Treppe" einfacher und damit übersichtlicher gestalten kann. Vielleicht war meine Wortwahl hier nicht so ganz gelungen. Deshalb entschuldige ich mich dafür. 

Viele Grüße
BahnLand

Geschrieben

So, nach einem sehr stressigen Vormittag habe ich jetzt mal die Tipps von @BahnLand versucht umzusetzen. Ich habe also folgende Werte der x-Datei verwendet:

    Frame Treppe01 { 
   FrameTransformMatrix { 
    6.812556, -3.742137, 0.001177, 1.000000;; 
   }    # <frametransformmatrix> 
   
     Frame TreppeOben01 { 
   FrameTransformMatrix { 
    -6.059983, 2.694453, 0.000189, 1.000000;; 
   }    # <frametransformmatrix> 
   
     Frame TreppeUnten01 { 
   FrameTransformMatrix {  
    7.271162, -3.741398, 0.008405, 1.000000;; 
   }    # <frametransformmatrix> 

Herausgekommen ist da dann diese Animationsdatei:

AnimTicksPerSecond {
1;
}

AnimationSet Rollen{
  
Animation {
{Treppe01}

AnimationKey  {
     2;
     2;
     0;3;6.812556, -3.742137, 0.001177;;,
     1;3;7.272326, -3.512252, 0.001177;;;
   }
   }

Animation {
{TreppeUnten01}

AnimationKey  {
     2;
     2;
     0;3;7.271162, -3.741398, 0.008405;;,
     1;3;7.730932, -3.741398, 0.008405;;;
     }

AnimationKey  {
     1;
     2;
     0;3;1.00000,0.00000,1.00000;;,
     1;3;1.00000,1.00000,1.00000;;;
     }
   }
   
Animation {
          {TreppeOben01}


AnimationKey  {
     2;
     2;
     0;3;-6.059983, 2.694453, 0.000189;;,
     1;3;-5.600213, 2.694453, 0.000189;;;
     }

   }
}

Das Ergebnis war aber nicht so, wie ich es mir vorgestellt habe: Roll1.mbp 

Die Animation erinnerte mich eher an ein schlagendes Herz als an eine Rolltreppe. Deshalb habe ich die z-Dateien im Frame Treppe01 getauscht:

ani1.thumb.jpg.9c51e0ada2a41c22dda3a2b06045f9b4.jpg

Das Ergebnis hat mir schon besser gefallen, aber oben öffnet sich eine Lücke und unten schwinnt die Treppe auf der Rampe: Roll2.mbp

Zuletzt habe ich dann auch noch den Versuch mit dem weglassen des Frames TreppeUnten gemacht, aber auch da bin ich nicht zufrieden: Roll3.mbp

Denn so sieht keine Rolltreppe unten aus. Fazit: Irgendwo ist noch der Wurm drin, aber den suche ich erst morgen, heute bin ich zu geschafft. Auf jeden Fall mal danke an @BahnLand und @kdlamann, ohne die Beispieldatei gäbe es noch keine Treppe, und ohne die Tipps bezüglich der Animationen würde ich mir immer noch die Haare raufen. In diesem Sinne wünsche ich euch nun einen schönen Abend.

Walter

Geschrieben

Hallo Walter,

21Rolltreppefalschausgerichtet.thumb.JPG.000351aedd8f2742a1f25751d00cb59c.JPG

ich habe festgestellt, dass Deine Rolltreppe entgegengesetzt zur Vorlagen-Rolltreppe von @kdlamann ausgerichtet ist: Die Rolltreppe steigt nicht in x-Richtung, sondern in die entgegengesetzte Richtung (Richtung -x). D.h die Animations-Objekte müssen sich nach links und nicht nach rechts bewegen, was bedeutet, dass Du die Treppe in Sketchup um180° gedreht haben musst, und daher die Treppenstufen-Länge von der Ausgangsposition der Animationsobjekte aus der jeweiligen FrameTransformMatrix nicht hinzuzufügen, sondern abzuziehen ist. 

22Ausbrecher.thumb.jpg.63ae5c11b2a5129ad29bb12d20847e52.jpg

Dies erklärt aber nicht, warum die Treppe insgesamt durch die Animation in den Boden schießt und sich auch die unterste Stufe komplett vom Beginn der Rolltreppe weg bewegt. Kann es sein, dass Du auch etwas an den Einstellungen "Originalgröße" und "Zielgröße" des Sketchup-DirectX-Exporters gedreht hast?

Ohne die skp-Datei und die x-Datei Deines Modells lässt sich das Problem nicht analysieren.

Viele Grüße
BahnLand

Geschrieben

Erst nochmal danke, @BahnLand, für Deinen letzten Beitrag. Ich habe beim erstellen der Rolltreppe den Nullpunkt in Sketchup als Startbasis genommem und die Treppe von oben nach unten gezeichnet. Denn ich will die Treppe ja in einem Bahnsteig einsetzen, und da bin ich eben von oben nach unten gegangen. Ich hatte gestern ja nur die Treppe selbst angepasst, die obere und untere Treppe aber noch nicht. Nach Deinem Hinweis auf die gedrehte Treppe habe ich die in Sketchup um 180 Grad gedreht, und da hat nun alles funktioniert. Aber dann habe ich festgestellt, dass ich ja zwei Treppen* habe, aber ich kann die nur beide aufwärts oder abwärts schicken. (*Die zwei Treppen habe ich aus dem Bahnsteig kopiert). Also habe ich eine gelöscht und plötzlich hatte ich -logisch - völlig andere Werte bei den Frames.

Und da kam mir es jetzt zunutze, dass ich - auch dank Deiner Tipps - wusste, was ich machen muss. Denn inzwischen "verstehe" ich, wie die Animation abläuft. Irgendwie ist es ja schon interessant, wie das Auge getäuscht wird, denn die Treppe bewegt sich ja im Prinzip nur um die 0,459770 cm nach vorn und um 0,229885 cm nach oben. Trotzdem hat man den Eindruck einer fahrenden Rolltreppe. Rolltreppe.mbp

Also nochmal mein herzlicher Dank für die Unterstützung an @BahnLand und @kdlamann. Durch euere Vorlagen und Tipps, wie ich Dinge berechnen kann, habe ich mir neue Kenntnisse für den Bau von Modellen erworben. Denn ich wollte keine fertige Lösung, sondern das Wissen, auf was es alles ankommt und was man beachten muss beim Modell. Dazu habt ihr mir verholfen. 

Walter

Geschrieben

Hallo Walter,

vor 1 Stunde schrieb Klartexter:

Nach Deinem Hinweis auf die gedrehte Treppe habe ich die in Sketchup um 180 Grad gedreht, und da hat nun alles funktioniert.

kann es sein, dass Du unter "Rolltreppe.mbp" die falsche Anlage hier eingefügt hast? Denn die Rolltreppe verhält sich hier genauso wie in den vorangehenden Anlagen "Roll2.mbp" und "Roll3.mbp". Sie zeigt also immer noch den "alten" Fehler.

Viele Grüße
BahnLand

Geschrieben
vor 21 Minuten schrieb BahnLand:

Hallo Walter,

kann es sein, dass Du unter "Rolltreppe.mbp" die falsche Anlage hier eingefügt hast? Denn die Rolltreppe verhält sich hier genauso wie in den vorangehenden Anlagen "Roll2.mbp" und "Roll3.mbp". Sie zeigt also immer noch den "alten" Fehler.

Hallo @BahnLand,

also bei mir läuft die Rolltreppe richtig, wenn ich die obige Anlage downloade. Aber ich hänge Dir gern die skp-Datei, x-Datei und die mbp-Datei hier mit an, dann kannst Du selber sehen, ob da wirklich noch ein Fehler auftritt. Bezüglich meines Bahnsteigs ist es allerdings so, dass ich die Rolltreppe wieder drehen muss, also meinen ursprünglichen Bau dort einsetzen. Die Werte sind da natürlich wieder andere, aber ich weiß ja jetzt, dass ich die Verschiebungswerte subtrahieren muss statt sie zu addieren. Die Funktionen habe ich noch nicht getestet, weil ich das gelernte jetzt auch auf den Aufzug anwenden will. Der sollte kein größeres Problem darstellen, weil er sich ja nur in die z-Richtung bewegt. Aber ich will es nicht beschreien, der nächste Haken kommt bestimmt. ;)

Gruß in die Runde
Walter

Bahnsteig.zip

Geschrieben

Bei mir genauso wie bei Thomas.
Offenbar hast du das geänderte Modell nicht veröffentlicht, Walter. Deshalb siehst nur du dein neues Modell, wir hingegen alle noch das alte.

Geschrieben
vor 3 Minuten schrieb Goetz:

Bei mir genauso wie bei Thomas.
Offenbar hast du das geänderte Modell nicht veröffentlicht, Walter. Deshalb siehst nur du dein neues Modell, wir hingegen alle noch das alte.

Danke für den Hinweis, @Goetz, ich hatte gedacht, dass die mbp-Datei unabhängig vom Entwurf im Katalog ist. Aber ich habe die Datei nochmal hochgeladen, unter BD90CA7B-6ECE-45C7-9CCB-5901FFDA8977 ist sie aufrufbar. Und mein Aufzug funktioniert auch! Ich habe da nur ein kleines Problem mit der Animationsgeschwindigkeit. Denn die Rolltreppe hat

AnimTicksPerSecond {
1;
}

der Aufzug kommt deshalb ziemlich rasant daher. Meine Überlegung geht dahin, die Animation in mehrere Schritte aufzuteilen, das müsste doch dann die Geschwindigkeit etwas ausbremsen, oder nicht? Ich teste das jetzt mal.

Gruß in die Runde
Walter

Geschrieben
Gerade eben schrieb Klartexter:

ich hatte gedacht, dass die mbp-Datei unabhängig vom Entwurf im Katalog ist.

Die mbp Datei (= Anlage) beschreibt nur, wo welche Modelle hinzustellen sind. Sie enthält keine Modelle. Die holt sich das Studio aus dem Katalog.

Geschrieben
vor 3 Minuten schrieb Klartexter:

ich habe die Datei nochmal hochgeladen, unter BD90CA7B-6ECE-45C7-9CCB-5901FFDA8977 ist sie aufrufbar.

Diese Variante ist zwar anders, aber kein bisschen besser.
Sorry Walter, aber du bist noch nicht am Ziel.

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...