kostenloser Webspace werbefrei: lima-city


Objekt in OpenGL je nach Rotation vorwärts bewegen?

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    krisi12345

    Kostenloser Webspace von krisi12345

    krisi12345 hat kostenlosen Webspace.

    Wie sorge ich dafür das sich ein Objekt bzw. Punkt (in OpenGL) je nach seiner Rotation vorwärts bewegt, wie in einem ego shooter. Also wenn die Rotation 45 ° beträgt sich das Objekt bei einem Meter nach vorne je ca 80 cm nach "x" und "y" bewegt.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wenn ich dich richtig verstanden habe, willst du sowas ähnliches wie das hier wissen;
    xpos -= (float)sin(heading*piover180) * 0.05f; // bewege auf der X-Ebene basierend auf der Richtung
    zpos -= (float)cos(heading*piover180) * 0.05f; // bewege auf der Z-Ebene basierend auf der Richtung


    "Wenn die vorwärts oder rückwärts Cursor-Taste gedrückt wurde, wird eine neue Position für die Kamera berechnet, indem Sinus und Kosinus Berechnungen durchgeführt werden (etwas Trigonometrie wird hier benötigt . Piover180 ist einfach ein Faktor um zwischen Grad und Radians zu konvertieren."


    Hier ist die Bewegung aber nur 2 Dimensional (X-Z), du kannst aber versuchen sie zu erweitern :wink:


    Quelle (Eine 3D Welt laden und sich in ihr bewegen): http://www.joachimrohde.com/cms/xoops/modules/articles/article.php?id=17
    Du könntest dir auch dieses Beispiel runterladen und damit rumexperimentieren :thumb:


    Beitrag zuletzt geändert: 17.10.2010 4:33:52 von tnr
  4. Hm also in opengl selbst gibt es ja die die Modelviewmatrix und die entsprechenden Funktionen, wie
    glTranslate, glRotate und glScale.
    Die ersten beiden geben dir ja schon die Möglichkeiten, die du benötigst.
    Du könntest einfach deine aktuelle Matrix mit glPushMatrix() sichern.
    Dann mit glLoadIdentity die Einheitsmatrix laden und dann mit den oben genannten funktionen alles machen, was du möchtest.
    Anschließend kannst du dir die Matrix hernehmen und jeden beliebigen Vektor damit Multiplizieren, was bewirkt, dass der Punkt auf den
    der Vektor zeigt genau den Transformationen unterworfen wird, die du per glTranslate/Rotate/Scale auf ihn angewendet hast.
    Ich bin mir nicht sicher, ob es direkt eine Funktion gibt, die das für dich übernimmt mit der Multiplikation von Vektor und Matrix,
    im Zweifelsfall müsstest du die selbst schreiben aber mit ein wenig Wikipedia sollte das gehen.
    Zum Schluss solltest du deine alte Matrix mit glPopMatrix() wiederholen und dann ist alles wiederhergestellt und du kannst weiterarbeiten.
  5. Autor dieses Themas

    krisi12345

    Kostenloser Webspace von krisi12345

    krisi12345 hat kostenlosen Webspace.

    tnr schrieb:
    Wenn ich dich richtig verstanden habe, willst du sowas ähnliches wie das hier wissen;
    xpos -= (float)sin(heading*piover180) * 0.05f; // bewege auf der X-Ebene basierend auf der Richtung
    zpos -= (float)cos(heading*piover180) * 0.05f; // bewege auf der Z-Ebene basierend auf der Richtung


    "Wenn die vorwärts oder rückwärts Cursor-Taste gedrückt wurde, wird eine neue Position für die Kamera berechnet, indem Sinus und Kosinus Berechnungen durchgeführt werden (etwas Trigonometrie wird hier benötigt . Piover180 ist einfach ein Faktor um zwischen Grad und Radians zu konvertieren."


    Hier ist die Bewegung aber nur 2 Dimensional (X-Z), du kannst aber versuchen sie zu erweitern :wink:


    Quelle (Eine 3D Welt laden und sich in ihr bewegen): http://www.joachimrohde.com/cms/xoops/modules/articles/article.php?id=17
    Du könntest dir auch dieses Beispiel runterladen und damit rumexperimentieren :thumb:


    Genau das mein ich aber inzwischen habe ich es selber herausgefunden, aber trotzdem danke (-;
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!