d3d_transform_stack anwenden??

  • GM 6

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • d3d_transform_stack anwenden??

    Hi,
    weiß jemand von euch zufällig wie man die d3d_transform_stack Funktionen richtig anwendet?
    Ich hab weder in der Doku noch im Internet ein Anwendungsbeispiel gefunden und ich hab keine Ahnung
    wie und wann ich die Befehle einsetzen muss..

    MfG
    HIM

    edit:
    oder besteht die Möglichkeit die Rotationsachsen eines Objektes zu ändern? Ich weiß nicht wie ich das beschreiben soll..
    Ich habe einen Helicopter mit Rotor. Der Rotor ist ein eigenes Model. Der Rotor soll sich mit dem Heli neigen. Das ist kein Problem.
    Nur wenn sich der Rotor jetzt noch um die Z-Achse drehen soll (also wenn der Rotor läuft), dann Taumelt er sobald sich der Heli in X oder Y Richtung neigt.
    Wie kann man dieses Taumeln verhindern? Woher es kommt ist mir klar..
    Ich hoffe man kann mich verstehen ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von HIM666 ()

  • Sometimes you temporarily want to save the current transformation, for example to add an additional transformation and then restore the old one (this often happens when drawing hierarchical models). To this end you can push the current transformation on a stack and later pop it from the stack to make it the current transformation again.

    Das sagt eigentlich schon alles. Wenn du zum Beispiel deine aktuelle Transformation speichern willst, du jedoch kurzzeitig eine andere brauchst kannst du das so machen:

    GML-Quellcode

    1. d3d_transform_stack_push(); // Derzeitge Transformation auf den Stack schieben
    2. /*
    3. Hier machst du etwas mit anderen Transformationen
    4. */
    5. d3d_transform_stack_pop(); // Hier holst du dir die vorige Transformation wieder zurück
    6. /*
    7. Hier kannst du dann wieder mit der alten Transformation arbeiten
    8. */


    Zum eigentlichen Problem: Du musst natürlich deinen Rotor um die lokale Z-Achse rotieren, d.h. nicht um die globale die nach oben zeigt. Im GM wird das wahrscheinlich ziemlich umständlich, da du mit Matrixmultiplikationen arbeiten müssen wirst.

    Edit: Der Code von Mr.Diesel sollte funktionieren, vergiss meinen letzten Satz. ;)

    © 2008 by Teamgrill Productions

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Soul Reaver ()

  • Ich hätte was zu dem Rotor :
    (Hab es nicht getestet. Sollte aber funktionieren.)

    GML-Quellcode

    1. d3d_transform_set_identity();
    2. d3d_transform_add_rotation_z(z_rot);
    3. d3d_transform_add_translation(0,0,z_rotor); //Höhe vom Rotor am Heli
    4. d3d_transform_add_rotation_x(x_rot);
    5. d3d_transform_add_rotation_y(y_rot);
    6. d3d_transform_add_translation(y,x,z); //Koordinaten auf dem Heli
    7. d3d_model_draw(model_heli,0,0,0,tex); //Das Modell transformiert zeichnen^^
    8. d3d_transform_set_identity();


    Ich hoffe, das hilft dir weiter.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Mr. Diesel () aus folgendem Grund: Sinnlosen Zitatsaufgriff gelöscht

  • @ Soul Reaver: Danke für das Anwendungsbeispiel, so hab ich mir es zwar schon gedacht, hatte aber leider nicht das gewünsche Ergebnis geliefert, deshalb hab ich angenommen, ich hätte die Funktionen falsch angewendet. Danke!
    @ Mr. Diesel: :O ich check es nicht.. dein Code funktioniert. Aber das hatte ich doch ganz am Anfang auch... nur da hat sich der Rotor beim Neigen oder Rollen immer noch um die sekrechte Achse gedreht.. jetzt dreht sich die z-Achse anscheinend mit.. Vielen Dank! ;)
  • Du musst die Reihenfolge der Rotationen beachten. Mr.Diesel's Code rotiert zuerst um die Z-Achse und dann wird erst die Neigungung um die X-/Y-Achse beachtet. Das hat den selben Effekt, als würdest du den Rotor zuerst neigen und dann um die lokale Z-Achse drehen.

    © 2008 by Teamgrill Productions