Bewegung im 3D raum
-
Also, ich verusche gerade Spaßeshalber eine Bewegung im 3D-raum aufzubauen, wie sie bei FPS üblich ist. Ich habe mir vor Monaten mal das NeHe-Tutorial zur Bewegung durchgelesen, weiß aber nicht mehr, ob dort der selbe Ansatz verwendet wurde.
Das einfachste was mir eingefallen ist (was vielleicht nicht das schnellste ist) ist folgendes:
Eine Klasse Spieler hat neben einigen anderen Variablen auch die Variablen posX, posY und posZ. Des weiteren rotX, rotY und rotZ. Pos[XYZ] sind, wie ihr euch denken könnt Positionsvariablen und rot{XYZ} die Variablen für die Blickrichtung. Gehe ich nun vom OpenGL-Standardkoordinatensystem aus, so bewege ich mich, wenn der Spieler quasi auf dem Boden bleibt, in der XZ-Ebene.
Wenn der Spieler eine Taste drückt, um sich vorwärts zu bewegen, so ist die Richtung, in die er sich bewegt logischerweise abhängig von seiner Blickrichtung (rot[XYZ]).
Wird nun die Taste zur Vorwärtsbewegung gedrückt, rechne ich die Veränderund der Positionskoordinaten folgendermaßen aus (rot[XYZ] sind in Grad gespeichert]):posX+=sin(rotY * PI / 180.0) * movFac;
posZ-=cos(rotY * PI / 180.0) * movFac;wobei movFac eine konstante Variable ist, mit der die maximale distanz die in einem Frame zurückgelegt werden kann, gemindert wird, sonst habe ich innherhalb von ca. 0.5 Sekunden 200 Einheiten hinter mioch gebracht
Was haltet ihr von dem Ansatz?
Kennt ihr alternativen, dir irgendwie wie auch immer besser sind?MfG Nero
-
Du kannst Dir die Blickrichtung ja als einfachen Vektor vorstellen. Zusammen mit der Position kannst Du dann für Rotationen etc. einfache Matrizen-Rechnungen benutzen. Falls der Spieler nach unten guckt z.B. aber nur geradeaus gehen soll mußt Du halt den Vektor in die entsprechende Ebene (z.B. XZ) projezieren.