0

方向ベクトルから回転行列を計算し、回転行列から方向ベクトルを計算する必要があります。

上方向は z 軸に対応する必要があり、前方が y で右が x です。

    D3DXMATRIX m; // the rotation matrix
    D3DXVECTOR3 v; // this is the direction vector wich is given
    D3DXVECTOR3 r; // resulting direction vector

    float len = D3DXVec3Length(&v); // length of the initial direction vector

    // compute matrix
    D3DXMatrixLookAtLH(&m, &v, &D3DXVECTOR3(0,0,0), &D3DXVECTOR3(0,0,1));

    // use the matrix on a vector { 0, len, 0 }
    D3DXVec3TransformCoord(&r, &D3DXVECTOR3(0,len,0), &m);

ここで、ベクトルrはvに等しくなければなりませんが、そうではありません。必要な結果を得るには、具体的に何をしなければなりませんか?

4

1 に答える 1

1

質問は私にとって少し混乱しています。方向ベクトルを使用すると、追加の制約を定義しない限り、カメラをその方向に向ける/見るようにする無限回転行列を定義できます。あなたのコードに基づいて、アップベクトルを次のようにしたいと思いますZ:-)

まず、注意してください。右手の座標系を記述しているように見えますが、左手関数を使用していますD3DXMatrixLookAtLH。第二に、この関数の参照は次のように述べています。

D3DXMATRIX* D3DXMatrixLookAtLH(
  _Inout_  D3DXMATRIX *pOut,
  _In_     const D3DXVECTOR3 *pEye,
  _In_     const D3DXVECTOR3 *pAt,
  _In_     const D3DXVECTOR3 *pUp
);

次のことを指定して、ルックアット マトリックスを作成しています。

  • カメラはvベクトルの最後にあり、
  • カメラが向いている[0 0 0]

これは正しいですか、それとも反対のことを探していたのでしょうか?

3 番目に、回転行列をスケーリングされたY基底ベクトルに適用しています[0 length 0]。回転したベクトルを にしたい場合は、代わりにスケーリングされた基底ベクトルにv適用する必要があると思います。X[len 0 0]

于 2012-10-13T14:59:44.240 に答える