Raumschiffsteuerung
-
Ich habe ein kleines Problem bei einer Raumschiffartigen Steuerung.
Bei einer Ego-Shootersteuerung habe ich es bis jetzt immer so gemacht:
Wenn man vorwärts drückt, werden die neuen x und z Koordinaten berechnet:
this->x -= (float)sin((this->yaw)*3.1415926/180) * this->speed; this->z -= (float)cos((this->yaw)*3.1415926/180) * this->speed;Dann wird zu Beginn des Zeichenvorgangs die Szene entsprechend ausgerichtet:
glRotatef(-camera.pitch,1.0f,0,0); glRotatef(-camera.yaw,0,1.0f,0); glTranslatef(-camera.x,-camera.y,-camera.z);Jetzt habe ich aber das Problem, dass ich keine Ahnung habe, wie ich eine Raumschiffsteuerung realisieren soll, vorallem wenn noch der Roll-Faktor hinzukommt.
Hat damit jemand Erfahrung und/oder kann mir weiterhelfen?
Vielen DankPitch/Yaw/Roll:
(http://liftoff.msfc.nasa.gov/academy/rocket_sci/shuttle/attitude/pyr.html)::edit::
mein Gehirn platzt gleich

-
Musst mit der Matrix fummeln und die Achsen-Vektoren entsprechend anpassen.
Ich hab sowas mal ausprobiert. Werde den code hier mal posten (Später, hab ihn gerade nicht zur Hand)
-
Cpp_Junky schrieb:
Musst mit der Matrix fummeln und die Achsen-Vektoren entsprechend anpassen.
Ich hab sowas mal ausprobiert. Werde den code hier mal posten (Später, hab ihn gerade nicht zur Hand)oh Gott ich hab Angst

da bin ich aber mal gespannt, dankeschön
-
Am besten du arbeitest mit Quaternions. Such im Web danach.
-
Mist, finde den blöden Code nicht mehr

Also im Prinzip funktioniert es etwa so:Du definierst drei Vektoren für dein Raumschiff. Diese Beschreiben quasi dessen Koordinaten-System. Das heisst ein Vektor zeigt nach Vorn, einer nach Oben und einer zur Seite. Wenn du jetzt dein Raumschiff drehen willst, nutzt du dafür nicht OpenGL sondern drehst die Vektoren selbst. Diese neu Berechneten Vektoren setzt du dann in die akuelle Modelview-Matrix ein (Musst mal in der OGL Referenz nachschauen welche Felder der Matrix die Achsen des Koordinatemsystems darstellen). Dann multiplizierst du nur noch die aktuelle Matrix mit dieser modifizierten und fertig. Easy oder ?

Klingt total schräg, aber wenn ich dir den Code zeige (den ich hoffentlich noch finde
) wirst du dich wundern wie simpel es ist.
-
Cpp_Junky schrieb:
Mist, finde den blöden Code nicht mehr

Also im Prinzip funktioniert es etwa so:Du definierst drei Vektoren für dein Raumschiff. Diese Beschreiben quasi dessen Koordinaten-System. Das heisst ein Vektor zeigt nach Vorn, einer nach Oben und einer zur Seite. Wenn du jetzt dein Raumschiff drehen willst, nutzt du dafür nicht OpenGL sondern drehst die Vektoren selbst. Diese neu Berechneten Vektoren setzt du dann in die akuelle Modelview-Matrix ein (Musst mal in der OGL Referenz nachschauen welche Felder der Matrix die Achsen des Koordinatemsystems darstellen). Dann multiplizierst du nur noch die aktuelle Matrix mit dieser modifizierten und fertig. Easy oder ?

Klingt total schräg, aber wenn ich dir den Code zeige (den ich hoffentlich noch finde
) wirst du dich wundern wie simpel es ist.Ich fleh dich an, *finde ihn*

aber danke schonmal
-
Ach, wofür brauchst du den Code? Tippen kannst du ja wohl selbst? Genauso wenig musst du die transformierten Vektoren mit dir rumschleppen. Das einzige was du brauchst ist die Transformationsmatrize die sich als Produkt aller Einzelbewegungen ergibt. Damit kannst du dann ja jederzeit jeden Vektor transformieren, egal ob up, front oder Bla...
Bye, TGGC (Demo or Die)
-
TGGC ist immer so unglaublich freundlich :p
-
Taelan schrieb:
TGGC ist immer so unglaublich freundlich :p
Wenn du Streicheleinheiten für dein Selbstwertgefühl willst, ist dieses Forum kaum der richtige Ort. TGGC hat sich sinnvoll geäußert und keineswegs geflamed.
@xindon: Wie gesagt würde ich mir mal Quaternions ansehn. http://www.gamedev.net/reference/list.asp?categoryid=28#250
Damit hast du keinen Gimbal Lock.
-
Taelan schrieb:
TGGC ist immer so unglaublich freundlich :p
*Taelan-mal-über's-Köpfchen-tätschel*

-
Okay, erstmal vielen Dank euch allen. Um ehrlich zu sein, hab ichs mir nicht so heftig vorgestellt. Da ich noch nichtmal Vektoren in der Schule hatte bis jetzt, sollte ich mich wohl besser bis nächstes Jahr (bin jetzt 10.) gedulden, um das oben genannte verstehen zu können.
Trotzdem danke
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=Quaternion_Camera_Class
hab hier noch was zum Thema gefunden
-
Bis du 10 Jahre alt oder in der 10ten Klasse?
Falls Ersteres zutrifft, dann mal ein fettes Respekt.
Bleib am Ball.Jedoch kann ich mich nicht daran erinnern, dass man Vektoren in der 5ten Klasse hatte.

-
Paul_C. schrieb:
Bis du 10 Jahre alt oder in der 10ten Klasse?
Falls Ersteres zutrifft, dann mal ein fettes Respekt.
Bleib am Ball.Jedoch kann ich mich nicht daran erinnern, dass man Vektoren in der 5ten Klasse hatte.

*lach* wie geil
Nein, ich bin jetzt in der 10. Klasse; es ist ein Punkt hinter der 10.
Man fängt in der 11. Klasse mit linearer Algebra an, soweit ich weiß.