3D Drawdinge einfach in einem Winkel drehen!

  • 3D Drawdinge einfach in einem Winkel drehen!

    Immer wenn ich im 3D Modus etwas mit 3D formen Zeichne und es um einen bestimmten Winkel drehen will benutze ich d3d_transform_set_rotation_*koordinate*(angle).
    Leider hat diese einzelt (hoffe ich nur).Funktion einen Nebeneffekt denn sie dreht das Drawobjekt von einem mir Unbekanntenmittelpunkt im System. Kann ich den Drehmittelpunkt also von wo aus ich etwas drehe ändern das er z.b in der mitte meines Drawobjektes leigt damt ich nicht die Breite/Höhe/Tiefe für das drawobjekt neu erstellen muss da er es verschiebt.

    Hab auch schon d3d_transform_set_rotation_axis(xa,ya,za,angle) probiert aber der dreht das ihrgend wie alles nur in die y koordinaten richtung.

    Bezeichnen wir den Drehmittelpunkt mal so ¥ (Yenne)
    SO ist es:
    ||||||||||||||||||||||||||
    ||||||||||||||||||||||||||
    |||||||||||||||||||||||||| ................. ¥ <-- Ihrgend wo im System!

    So will ich es:
    ||||||||||||||||||||||||||
    ||||||||||¥ ||||||||||||
    ||||||||||||||||||||||||||
  • dein unbekannter punkt hat die koordinaten 0,0,0 (x,y,z)
    also schiebst du dein 3D objekt zuerst in den nullpunkt drehst es und schiebst es dann zurück....
    das sollte eigentlich gehen.

    Xmas-Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • Das Zurückschieben geht nicht, da du sieh auf Punkt wo du sie gedreht hast schon gezeichnet hast. Und schon gezeichnetes lässt sich nicht verschieben!

    Ich habe folgende 2 Möglichkeiten:
    1. Ich verschiebe den rotationspunkt
    2. (Viel zu kompliziert )Ich berechen durch die entfernung vom Winkel die x,y und z werte, die ich benutzen muss um die gedrehten objekte auf die position zu verschieben wie als wäre der winkel 0°

    Es muss doch ihrgend wie möglich sein rotationspunkt zu verschieben!
  • dann machs so:
    du drawst dein object direkt auf den nullpunkt, dazu ne drehung und ne verschiebung um x,y,z.
    z.B.:

    GML-Quellcode

    1. {
    2. d3d_transform_add_rotation_x(90)
    3. d3d_transform_add_translation(x,y,32)
    4. d3d_draw_cylinder(-8,-8,-2,+8,+8,2,background_get_texture(tex_wood),16,1,true,8)
    5. d3d_transform_set_identity()
    6. }


    Xmas-Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • Benutzer online 1

    1 Besucher