2016-06-25 6 views
0

xyz座標x = 102、y = 0.75、z = -105.7などの文字の位置があります。そして、私は、グラフィックスとどのようにこれらのデータは、文字の向きに相関することができますについてはあまり理解していない対面方向ベクトルへの回転行列

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

などの文字のための回転行列を持っています。キャラクターが直面している方向を目指すために、そのベクトルを使うことができるようなベクトルを見つけたいと思います。それ、どうやったら出来るの?

+0

これらのマトリックスはどこから取得していますか? –

+0

これは[tag:unity3d]、[tag:xna]またはgeneral [tag:math]についてですか?少なくともXNAは対面する方向を得るための簡単なプロパティを提供するためです。 –

+0

私はxnaを使用しています。行列の値と位置は、ゲームのメモリからのものです。ポジションは正確であり、テストされています。私は上記の9つの値を使用して行列を作成し、次にmatrix.forwardメソッドからベクトルを取得します。この方向に何かを撃つ(アニメーションを発射する)と、キャラクターが直面している方向ではないからです。 –

答えて

1

キャラクターが向いている方向は、回転行列の3番目の行です。だから、次のようになります。

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

このベクトルは正規化されたように見えますが、それがなかったら、あなたはどうなる:

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

行列がXNA行列であるならば、あなたは、単に使用しますマトリックス構造のMatrix.Forwardプロパティと同じ結果を取得します。

+0

こんにちはスティーブ、私はすでにあなたが示唆していることをやっていますが、問題は私がキャラクターの位置からこの方向に発射したいです。キャラクターの現在の位置から(1,2,3)の位置で発砲するコマンド火x = 1、y = 2、z = 3を持っているとしましょう。今、私はこのコマンドの方向ベクトルのx、y、zを使用すると、それはキャラクターの現在の位置から向いている方向に平行に発射されますか?または私は余分な計算を行う必要がありますか? –

+0

ありがとう、@スティーブ、私はついにそれを解決することができます –

1

私は最終的にそれを解決することができます。実際、それはかなり単純なベクトル数学です。回転行列は既にスティーブが示唆しているように私に方向ベクトルを与えていましたが、私のアニメーションを動作させるためにその線に沿ってある特定の点まで発射しなければならなかったので...実際には方向ベクトルで示される線に沿った点が必要でした。だから、私はちょうど方向ベクトルに沿ってキャラクターの現在の位置から約1000単位離れたポイントを計算し、ラインで発射、それは働いた!

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); 
関連する問題