Projektil (Beispiel "Rocketlauncher") entlang einer Kurve verschießen
-
Hallo liebe Grafikfreunde,
ich möchte in meinem Spiel eine Rakete nicht kerzengerade auf ein Ziel abfeuern. Schöner fände ich wenn für jede Rakete eine zufällige Kurve berechnet werden würde die genau im Ziel endet. Habe also zwei Fragen:
-
Wie ermittle ich die Kurve? Nehme an, dass ich da etwas mit sin und cos machen muss....
-
Wie lasse ich mein Projektil bei ihrem Flug der Kurve folgen? Hier muss ich die Kurve wahrscheinlich in geeignet feinen Schritten abstasten und meine Rakete dann von einem zum nächsten dieser Abtastpunkte schicken....
Hier nochmal ein schönes Bild, wie ich mir das in etwa vorstelle
http://img24.imageshack.us/img24/7284/raketenfhrung.jpgDanke.
-
-
1. Nimm ein Spline und verschieb die Kontrollpunkte zufällig
2. Genau so
-
Danke für den Tipp!
Jetzt habe ich eine weitere Frage. Wie lasse ich die Rakete immer in die Bewegungsrichtung zeigen?
Habe einen Vektor a für die Rakete definiert, der die initiale Bewegungsrichtung der Rakete beschreibt.
Zusätzlich kann ich den aktuellen "Richtungsvektor der Bewegung" b über die Kurve bestimmen.
Den Winkel, um die Rakete richtig auszurichten, kann ich ja dann mit dem Skalarprodukt aus a und b bestimmen. Mir fehlt aber dann noch die Rotationsachse.
Könnt ihr mir helfen? Oder würdet ihr anders vorgehen?
-
Die Rotationsachse wäre natürlich durch den Vektor definiert, der auf a und b senkrecht steht -> Kreuzprodukt. Wahrscheinlich wirst du feststellen, dass du diese Drehung in Matrixform bzw. als Quaternions (womit auch immer du arbeitest) vereinfacht darstellen kannst und sich die explizite Berechnung von Kreuz- und Skalarprodukt erübrigt.
geloescht
-
@geloescht
Klar, Danke, das Kreuzprodukt von a und b ....Kannst du mir eventuell diese von dir erwähnte vereinfachte Darstellung in Matrizenform genauer erläutern. Quaternionen wollte ich eigentlich zunächst umschiffen...
-
Ok, meintest wohl ne Rotationsmatrix.
Ich benutze im Moment XNA. Da gibts ne schöne Funktion, die mir eine Matrix aus der Rotationsachse und dem Rotationswinkel bestimmt:
Matrix.CreateFromAxisAngle(r.rotationAxis, r.rotationAngle)
Danke nochmal für die Hilfe.
-
Matrix Matrix.FromQuaternion(Quaternion q)
gibts auch^^ *klugscheiss*