3D: Kamera um x-Achse drehen

  • 3D: Kamera um x-Achse drehen

    Also, ich bastle zur Zeit an einem 3D Leveleditor herum, mit dem ich dann später ein paar Levels für ein Spiel
    machen kann. Mein Problem ist folgendes:
    Die Kamera ist immer auf den Punkt gerichtet, an dem der nächste Baustein hingesetzt wird. Nun soll man die
    Kamera auch um das Objekt herum drehen können. Um die Z-Achse herum ist das Ganze noch einfach,
    da kann man ja mit lenghtdir_x/y arbeiten. Wie mache ich das aber, wenn sich die Kamera um die x-Achse herum
    drehen soll?
    Meine erste Überlegung war ja, eine Variable zdirection zu benutzen, damit ich auch wieder die lengthdir-Funktionen
    benutzen kann. Allerdings hat das gar nichts gebracht.
    Ich hoffe, ich konnte mein Problem einigermaßen verständlich darstellen und bin für jede Hilfe dankbar.
    Gruß, Spellmaker
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • Sollte das nicht gehn, indem du x mit y austauscht und y mit z? also dass y=x-Achse ist und z=y-Achse?
    "das war meine letzte flamewar PM an dich ."
  • Ich habe auch mal für ein 3D Game von mir einen Leveleditor gebaut, jedoch habe ich den Editor in 2D gebaut.
    Durch unterschiedliche Objekte die, die höhe angeben, konnte man diese "map" speichern, und im 3D Game laden, der die Infos dann von einer Metal (einfache txt Datei) auslieste.
    Wäre mein Tipp.

    MFG
    Metalknight
  • Was du laut deiner Beschreibung benötigst, sind "xup", "yup" und "zup":
    d3d_set_projection(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup)
    Allerdings denke ich, dass du das Ganze ziemlich umständlich angehst. Ich kann mir nicht erklären, wieso die Kamera um diese Achse gedreht werden soll. Wenn du uns das konkreter beschreiben könntest (besser wäre eine gm6/gmk), könnte man das wahrscheinlich stark vereinfachen.
    Zur Not könntest du z auch temporär zu x oder y machen, um mit lengthdir_x/y zu arbeiten, aber ich glaube, das wäre unnötig kompliziert für dein Vorhaben.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Ich will, dass man den Block von jeder Seite betrachten kann, also auch unter verschiedenen
    Winkeln betrachten kann. Zum besseren Verständnis hab ich mal eine kleine Skizze gemacht
    (ich hoffe sie ist einigermaßen verständlich :D ).

    Außerdem lad ich mal das hoch, was ich bisher gemacht habe, wie gesagt, Drehung um die
    z-Achse geht, die um die x-Achse hab ich durch ein Behelfsmittel ersetzt.
    Die Bedienung wird in der Game-Info erklärt.
    So, ich hoffe, dass jetzt ein bisschen klarer ist, was ich eigentlich meine :D

    @Metalknight: So ungefähr funktioniert mein Editor auch :)



    Edit: Texturen in der .gmk ausgetauscht
    Dateien
    • 3d1.zip

      (30,31 kB, 141 mal heruntergeladen, zuletzt: )
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____

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

  • Ich hab dir mal aus einem meiner Spiele ein Example erstellt. Du kannst die Maus frei über das Spielfeld bewegen. Bei gedrückter rechter Maustaste kannst du die Sicht drehen und zoomen. Es sieht nur kompliziert aus, weil die Mausbewegung ja relativ zur Blickrichtung erfolgen muss. Ich hoffe, du kannst mit dem Example etwas anfangen.
    Dateien
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Mauges erste Vermutung war doch richtig: Ich hatte vergessen, den Up-Vektor neu zu setzen.
    für alle, die dasselbe auch mal machen wollen:

    Im Button:

    GML-Quellcode

    1. y=y+lengthdir_x(abstand,zdirection);
    2. z=z+lengthdir_y(abstand,zdirection);

    Der Up-Vektor:

    GML-Quellcode

    1. xup=0;
    2. yup=lenghtdir_x(1,zdirection-90);
    3. zup=lenghtdir_y(1,zdirection-90);


    Vielen Dank an alle, die mir geholfen haben :thumbsup:
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____