Rollen

  • Hallo,
    also ich sitze gerade an einer Art Flugsimulator (in 3d). Doch das Rollen krieg ich einfach nicht hin.
    Kann mir daher jemand helfen, dass man mit den Pfeiltasten (links und rehts) rollen kann, unabhängig von der Position und Richtung?
    mfg. gm-Nutzer
  • Dazu bräuchte man vll mal einen Code, auf dem man seine Erklärungen aufbauen kann.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Ich nehme mal an du hast als Flugzeug ein 3D-Modell und dein Problem liegt in der richtigen Drehung des Modells mit den d3d_transform Funktionen.
    Seh ich das richtig?
    Außerdem würde ich noch gerne wissen mit welchen Variablen du Position und Richtung des Flugzeuges beschreibst. Die Position wahrscheinlich mit x,y,z aber bei der Richtung gibt es mehrere Möglichkeiten: Entweder durch einen Vektor, oder durch zwei Variablen, die die horizontale und vertikale Drehung in Grad angeben.
    Diese Angaben wären schon nicht schlecht, damit man dir helfen kann.
  • Entschuldigt bitte, wenn ich etwas unklar war und auch, dass ich erst jetzt antworten kann.

    @Bl@ckSp@rk: Zuerst muss ich mal die Kamerasicht richtig einstellen, das drehen der models kommt später. (Vielleicht mit einem neuen Thread :( )

    @Nobody-86: Ich versteh nicht ganz wie du mit einem einzigen Koordinatensystem Position, Pitching und Heading angibst.

    @all: Also ich habe sechs Variablen, direction (horizontal), virection (vertikal), und rdirection(rollen),
    sowie x, y, z. Mein Problem liegt darin "die Sicht auf den Kopf zu stellen" also hauptsächlich bei der dritten Variable. Ich nehme mal an, das muss mit den up-Vektoren gesteuert werden, jedoch komme ich mit den up-Vektoren nicht ganz klar. Stimmt es dass man eine Position angibt auf die sich die Kamera-Unterseite ausrichtet? In dem Fall hab ich keine Ahnung wie ich diese Werte ständig neu berechnen sollte. Momentan sieht die Zeile daher (noch) so aus:

    GML-Quellcode

    1. d3d_set_projection(x,y,10, x+cos(direction*pi/180),y-sin(direction*pi/180),10+lengthdir_y(1,vdirection),0,0,1);


    Ich hoffe ich war diesmal etwas klarer.
    mfg. gm-Nutzer

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von gm-Nutzer ()

  • Hab mal auf die schnelle ein script gebastelt, in dem durchaus noch fehler sein können, hab das jetzt nicht getestet. Ich hab aber andere variablen genommen, kürzere. Horizontaler winkel ist hd vertikaler vd und drehung um die längsachse (Rollen) ld. Probier mal obs funktioniert, eventuell sind manche Richtungen noch umgekehrt, was sich aber schnell beheben lassen würde.

    GML-Quellcode

    1. var hx, hy, h, v, rx, ry, rz, n1x, n1y, n1z, n2x, n2y, n2z, l;
    2. hx = cos(degtorad(hd));
    3. hy = -sin(degtorad(hd));
    4. h = cos(degtorad(vd));
    5. v = sin(degtorad(vd));
    6. rx = hx*h;
    7. ry = hy*h;
    8. rz = v;
    9. n1x = -hx*v;
    10. n1y = -hy*v;
    11. n1z = h;
    12. n2x = ry*n1z-rz*n1y;
    13. n2y = rz*n1x-rx*n1z;
    14. n2z = rx*n1y-ry*n1x;
    15. l = sqrt(sqr(n2x)+sqr(n2y)+sqr(n2z));
    16. n2x /= l;
    17. n2y /= l;
    18. n2z /= l;
    19. d3d_set_projection(x,y,z,x+hx*h,y+hy*h,z+v,n1x*sin(degtorad(ld))+n2x*cos(degtorad(ld)),n1y*sin(degtorad(ld))+n2y*cos(degtorad(ld)),n1z*sin(degtorad(ld))+n2z*cos(degtorad(ld)));
    Alles anzeigen
  • Benutzer online 1

    1 Besucher