3D Rotation um eigene Z Achse

  • GM 8

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

  • 3D Rotation um eigene Z Achse

    Hey,

    ich habe ein Problem mit der Drehung um die eigene Achse in Studio (3D), eigendlich dürfte es nicht all zu schwer sein, was es allerdings doch sein will ...
    Ich lasse zum testen einfach einen normalen Block drawn, welcher sich um dei eigene Z-Achse drehen soll. Der Code heißt:

    GML-Quellcode

    1. d3d_set_projection(x,y+500,500,x,y,0,0,0,1)
    2. d3d_transform_set_identity()
    3. d3d_transform_add_rotation_z(direction);
    4. d3d_transform_add_translation(x,y,0);
    5. d3d_draw_block(x-10,y-10,0,x+20,y+20,20,tex,0,0)
    6. d3d_transform_set_identity()
    7. if keyboard_check(ord("A")) { direction -= 2 }
    8. if keyboard_check(ord("D")) { direction += 2 }


    Allerdings dreht sich der Block nur von seiner jetzigen Position um den 0 Punkt. Ps: Ich verstehe den Unterschied zwischen d3d_transform_add_translation und d3d_transform_set_translation nicht, was ist da anders? hoffe ihr könnt mir helfen und ja, ich habe schon so einge Trhead durchschaut, welche mir aber bis jetzt nicht geholfen haben :(
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • Ich bin noch etwas müde, darum beantworte ich erstmal nur den Unterschied zwischen add und set^^ damit ich dann keinen Blödsinn von mir gebe..

    mit set_translation setzt du immer einen absoluten Wert ausgehend von einer absoluten position, also z oben, x vone und y rechts
    mit add_translation setzt du einen Wert auf den momentan vorhanden Wert. Also wenn du schon um 2 grad gedreht hast, dann nachher 4 grad.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Die Antwort ist ganz einfach. Lass die X und Y Verschiebung bei draw block weg, da diese als aller erstes ausgeführt wird. Sonst hast du dann alles richtig. Momentan verschiebst du das Objekt entlang der X und Y Koordinate und dann drehst du es um den Nullpunkt und dann verschiebst du das Objekt nochmal um die X und Y Koordinate.
  • Danke,
    wenn ich jetzt also den Code so umändere:

    GML-Quellcode

    1. d3d_transform_add_translation(x+20,y+20,0);
    2. d3d_draw_block(-20,-20,0,+20,+20,20,tex,0,0)

    funktioniert es. Mit d3d_transform_add_translation werden also praktisch gesehen die x,y,z Werte bei d3d_draw_block schon in Relativwerte geändert, weshalb man dann nicht mehr x+... und y+... eintragen muss?
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.