2016-06-25 22 views
0

Ich habe eine Position eines Zeichens als xyz Koordinaten x = 102, y = 0.75, z = -105.7 zum Beispiel. Und ich habe die Rotationsmatrix für den Charakter alsRotationsmatrix zu gerichteten Richtungsvektor

M11 = -0.14 
M12 = 0 
M13 = -0.99 
M21 = 0 
M22 = 1 
M23 = 0 
M31 = 0.99 
M32 =0 
M33 = 0.14 

Ich habe nicht viel Verständnis über Grafiken und wie diese Daten in die Blickrichtung des Charakters korrelieren kann. Ich möchte einen Vektor finden, so dass ich diesen Vektor verwenden kann, um auf eine Richtung zu zielen, der der Charakter gegenübersteht. Wie mache ich das?

+0

Wo bekommen Sie diese Matrizen her? –

+0

Geht es um [tag: unity3d], [tag: xna] oder allgemein [tag: math]? Weil mindestens XNA eine einfache Eigenschaft zur Verfügung stellt, um die Blickrichtungsrichtung zu erhalten. –

+0

ich benutze XNA. Die Matrixwerte und die Position stammen aus dem Speicher eines Spiels. Die Position ist genau und getestet. nicht sicher über die Matrix-Werte obwohl ... Ich konstruiere eine Matrix mit den obigen 9 Werten, dann einen Vektor von Matrix.forward-Methode. aber es gibt mir nicht die richtige Richtung, denn wenn ich etwas in dieser Richtung schieße (feuere eine Animation), ist es nicht die Richtung, in die der Charakter blickt. –

Antwort

1

Die Richtung, in die Ihr Charakter blickt, ist die dritte Zeile der Rotationsmatrix. So wäre das:

Vector3 facingDirection = new Vector3(0.99f, 0f, 0.14f);//(m31,m32,m33) 

dieser Vektor erscheint normalisiert werden, aber wenn es nicht so wäre, würden Sie tun:

Vector3 facingDirection = Vector3.Normalize(new Vector3(0.99f, 0f, 0.14f)); 

Wenn die Matrix ein XNA Matrix ist, dann würden Sie einfach verwenden die Matrix.Forward Eigenschaft der Matrix-Struktur und erhalten das gleiche Ergebnis.

+0

Hallo Steve, ich mache bereits das, was du vorschlägst, aber das Problem ist, dass ich aus der Position des Charakters auf diese Richtung schießen möchte. Sagen wir, ich habe einen Befehl Feuer x = 1, y = 2, z = 3, um an der Position (1,2,3) von der aktuellen Position des Charakters aus zu schießen. Wenn ich nun die x, y, z des Richtungsvektors für diesen Befehl verwende, feuert er parallel zur Blickrichtung von der aktuellen Position des Charakters ab? oder muss ich extra rechnen? –

+0

Danke, @Steve, ich bin endlich in der Lage, es zu lösen –

1

Ich bin endlich in der Lage, es zu lösen. Eigentlich ist es ziemlich einfach Vektor Mathematik. Die Rotationsmatrix gab mir bereits den Richtungsvektor wie oben von Steve vorgeschlagen, aber ich musste entlang dieser Linie zu einem bestimmten Punkt feuern, um meine Animation zum Laufen zu bringen ... Also brauchte ich tatsächlich einen Punkt entlang der Linie, die durch den Richtungsvektor angegeben wurde. Also, ich habe gerade einen Punkt 1000 Einheiten weg von der aktuellen Position des Charakters entlang des Richtungsvektors berechnet und auf die Linie geschossen, es hat funktioniert!

Vector3 facingDirection = new Vector3(RotMatrix[2, 0], RotMatrix[2, 1], RotMatrix[2, 2]); // direction vector 
        Vector3 currentPos = new Vector3(character.PosX, character.PosY, character.PosZ); // I also have position of the character 
// Now calculate a point 10000 units away along the vector line 
        var px = currentPos.X + facingDirection.X * 10000; 
        var py = currentPos.Y + facingDirection.Y * 10000; 
        var pz = currentPos.Z + facingDirection.Z * 10000; 
        return new Vector3(px, py, pz); 
Verwandte Themen