Seek-Algorithmus in 3D
-
Hallo
Ich arbeite derzeit an einer KI für ein 3D-Computerspiel. Man sitzt in einem shuttle und kann frei in der Welt herumfliegen, die Agenten sollen dies auch können. Kopfzerbrechen bereitet mir hierbei ein "Seek"-Algorithmus. Ich möchte dem Agenten einen Punkt (x,y,z) geben, zu dem er möglichst direkt und möglichst schnell fliegen soll (jedoch nicht "direkt", sondern er soll erst gas geben, dann eine Kurve fliegen und sich dem Ziel annähern). Dies funktioniert soweit für Rotationen um die Y-Achse (yaw) und X-Achse (pitch), wenn ich jedoch die Rolle um die Z-Achse hinzunehme fliegt der Agent irgendwohin. Hierbei ist noch zu erwähnen, dass der Agent ein lokales Koordinatensystem mit up, front und right Vektor besitzt welches den Ursprung in der Mitte des shuttles hat. Der front Vektor ist hierbei die Richtung in der das shuttle derzeit mit der Nase zeigt. Wenn ich also das shuttle rolle, stimmen yaw und pitch nicht mehr, da sich das Koordinatensystem gedreht hat.In den Büchern die ich konsultiert habe(Millington, Buckland) sind jeweils "Seek"-Algorithmen beschrieben, jedoch nur in 2D oder aber sie ignorieren die Rolle einfach, sprich das shuttle ist bei der Ankunft in einer Schräglage oder sogar auf dem Kopf...
Gibt es eine Möglichkeit dies mit Vektoren zu lösen?
-
pada schrieb:
In den Büchern die ich konsultiert habe(Millington, Buckland) sind jeweils "Seek"-Algorithmen beschrieben, jedoch nur in 2D oder aber sie ignorieren die Rolle einfach, sprich das shuttle ist bei der Ankunft in einer Schräglage oder sogar auf dem Kopf...
Warum machen die das? Ganz einfach, dadurch vereinfacht sich die Rechnung enorm und man kann es mit ein paar Gleichungen ausdrücken.
Im 3D-Raum + Rotationen um die Achse des zu bewegenden Körper musst du das ganze allgemein mit Vektoren und Transformationsmatrizen ansetzen.
http://de.wikipedia.org/wiki/KinematikAls erstes würde ich dir zwei Koordinatensysteme vorschlagen. Eines, dass im Mittelpunkt des Raumschiffes (KOS 1) liegt und ein zweites (KOS 0), dass den Ursprung des Raumes darstellt.
Das KOS des Raumschiffes dreht sich mit dem Körper und liegt im Schwerpunkt (--> Trägheitsmomente & Co. lasses sich leichter berechnen).Zwei Vektoren sind einzuführen.
- Vektor v1: Zeigt vom Ursprung des Raumes zum Schwerpunkt des Schiffes und ist im KOS 0 definiert
- Vektor v2: Zeigt vom Schwerpunkt zu einem beliebigen Punkt des Schiffes und ist im KOS 1 definiertVektor v2 muss nun in das KOS 0 transformiert werden. Siehe Transformationsmatrix
Die erste Ableitung der Vektoren == Geschwindigkeitsvektor
Die zweite Ableitung der Vektoren == BeschleunigungAchtung: d/dt(A01 * v2) --> Produktregel, vereinfachung durch tilde Matrix möglich
Sollte dir das gar nichts sagen, solltest du dich erst einmal in die Kinematik einarbeiten
Gruß,
Thomas