Tranformation um zwei punkte

  • GM 7
  • Tranformation um zwei punkte

    Ich brauche mal eben einen kleinen Gedankensstoß.
    Ich habe ein model, das ich um zwei Punkt drehen will. Doch irgendwie dreht das model total verkehrt. Ich ging davon aus, das es einfach nur mit der Reihenfolge der Transformationen zusammen hängt. Aber es scheint irgendwie eine verlixte, höhere Macht im Spiel zu sein.

    Mein verstand sage mir, das es am ehesten so gehen müsste:

    GML-Quellcode

    1. d3d_transform_set_identity();
    2. d3d_transform_add_rotation_z(vinkel1);
    3. d3d_transform_add_translation( x+lengthdir_x(12.478,direction) , y+lengthdir_y(12.478,direction) , z );
    4. d3d_transform_add_rotation_z(vinkel2);
    5. d3d_transform_add_translation( x, y, z);
    6. d3d_model_draw(lenker,0,0,0,-1);
    7. d3d_transform_set_identity();


    Wäre sehr nett, wenn mir mal jemand "den Weg weist"

    MfG SDX
  • Probiers mal soh :

    d3d_transform_set_identity
    ();
    d3d_transform_add_rotation_z(vinkel1);
    d3d_transform_add_translation
    ( lengthdir_x(12.478,direction) , lengthdir_y(12.478,direction) , 0);
    d3d_transform_add_rotation_z(vinkel2);
    d3d_transform_add_translation( x, y, z);
    d3d_model_draw(lenker,0,0,0,-1);
    d3d_transform_set_identity();


    Gruss Sandro
  • Erklär mal bitte genauer was passieren soll. Denn unter

    Ich habe ein model, das ich um zwei Punkt drehen will.

    kann zumindest ich mir recht wenig vorstellen. Zunächst mal ist mir nicht klar, wie man etwas "um zwei Punkte dreht". Man kann entweder ein Objekt um eine Achse um einen bestimmten Winkel drehen oder nacheinander um zwei Punkte. Wobei die Rotation um einen Punkt im Grunde auch keinen Sinn ergibt. Man dreht eigentlich immer um eine Achse, meinetwegen eine, die durch diesen Punkt verläuft.
  • Ich habe mich mal dazu durchgerungen, die gmk zu posten..
    Ist leider schon ein bischen komplex, aber ich wollte jetzt nich alles auseinander basteln was ich bisher gemacht habe, nur damit ihr euch das mal eben angucken könnt.
    Im drawevent von object2 findet ih das problem.. Ist aber alles kommentiert, sollte also kein problem sein..
    (wehe ich finde das model in einem anderen game wieder ;P)

    EDIT: was vergessen: mit scrollen und ctrl+scrollen läst sich die camera drehen..

    EDIT: datei gelöscht, brauchen wir ja nicht mehr ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von SDX ()

  • So.. Fehler gefunden:

    GML-Quellcode

    1. // hier beginnt alles
    2. d3d_transform_set_identity();
    3. d3d_transform_add_rotation_z(lenkung*10); // lenkung ist -1, 0 oder 1, je nachdem in welche richtung es geht
    4. d3d_transform_add_translation(12.478,12.478,0);// der lenker ist 12.478px vom zentrum des models entfernt
    5. d3d_transform_add_rotation_z(direction); // und natürlich soll er sich auch noch in die richtung drehen, und die man sich bewegt
    6. d3d_transform_add_translation(x,y,z); // das zentrum vom model
    7. d3d_model_draw(lenker,0,0,0,-1);
    8. d3d_transform_set_identity();
    9. // das wars auch schon


    Dein Problem war es, dass du eine Verschiebung bereits mit der Richtung gemacht hast und dann nochmals mittels Direction gedreht hast. Also hab nun einfach bei "Translation" die Direction rausgenommen... Funktioniert ;)

    Gruss Sandro
  • hm, jetzt ist der lenker neben dem model... und dreht sich eiglich nur verschoben um das zentrum :/
    auch wenn man das y auf 0 setzt, ist der lenker um 12,.. zu weit vorne, und wenn man das dann auf 0 setzt is da, logischerwiese, kein efekt mehr

    EDIT: ach ja, das zentrum ist da wo die kette mir dem model verbunden ist, also unterm sitz...

    MfG SDX
  • Also soooh scheint der Lenker am richtigen Platz zu sein:

    // hier beginnt alles
    d3d_transform_set_identity();
    d3d_transform_add_rotation_z(lenkung*10); // lenkung ist -1, 0 oder 1, je nachdem in welche richtung es geht
    d3d_transform_add_rotation_z(direction); // und natürlich soll er sich auch noch in die richtung drehen, und die man sich bewegt
    d3d_transform_add_translation(x,y,z); // das zentrum vom model
    d3d_model_draw(lenker,0,0,0,-1);
    d3d_transform_set_identity();
    // das wars auch schon

    Ansonsten belässt du die Transformation drinne und verschiebst nur auf die X Archse.

    Oder woo soll der genau hin??
  • Das fahrzeug besteht aus meheren Modellen, da es beweglich sein soll. Alle modelle haben deren Orgin so, dass wenn man sie an ein und der selben stelle drawt, sie zusammen passen. Sorry wegen dem Post vorhin, der war bestimmt nicht sonderlich aufschlußreich, aber ich musst schnell weg..

    Also, ich habe jetzt eine skitze, die hoffentlich alles genau erklärt. Einmal wird das model um seinen orign gedreht, damit es richtig um verhältnis zur richtung steht. Das ist ja auch kein porblem. Das nächste schon: Das model muss sich noch ein mal um einen andern punkt drehen, der 12,478px von zentrum entfernt ist. Hier dreht sich das model (ein Lenker für die die es nicht wissen sollten) in die richtung in die man lenkt.
    Mensch, ist irgendwie nicht leicht zu erklären :D


    MfG SDX
  • Wenn ich dich nicht falsch verstanden hab, funktionierts damit:

    GML-Quellcode

    1. // hier beginnt alles
    2. d3d_transform_set_identity();
    3. d3d_transform_add_translation(-12.478,0,0);
    4. d3d_transform_add_rotation_z(lenkung*10);
    5. d3d_transform_add_translation(12.478,0,0);
    6. d3d_transform_add_rotation_z(direction);
    7. d3d_transform_add_translation(x,y,z);
    8. d3d_model_draw(lenker,0,0,0,-1);
    9. d3d_transform_set_identity();
    10. // das wars auch schon