Objekt in OpenGL je nach Rotation vorwärts bewegen?
lima-city → Forum → Programmiersprachen → C/C++ und D
beispiel
berechnung
bewegen
cursor
erweitern
faktor
http
kamera
konvertieren
laden
matrix
objekt
position
punkt
richtung
rotation
sinus
taste
url
vektor
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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
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
Beitrag zuletzt geändert: 17.10.2010 4:33:52 von tnr -
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.
-
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
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
Genau das mein ich aber inzwischen habe ich es selber herausgefunden, aber trotzdem danke (-; -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage