3Dモデルの回転を記述するクォータニオンがあるとします。
私がやりたいのは、オブジェクト(rotationQuaternion、サイドベクトル...)が与えられた場合、それをターゲットポイントに位置合わせしたいということです。
宇宙船の場合、コックピットがターゲットを指すようにします。
これが私が持っているいくつかのコードです...それは私が望むことをしていません、そして私は理由がわかりません...
if (_target._ray.Position != _obj._ray.Position)
{
Vector3 vec = Vector3.Normalize(_target._ray.Position - _obj._ray.Position);
float angle = (float)Math.Acos(Vector3.Dot(vec, _obj._ray.Direction));
Vector3 cross = Vector3.Cross(vec, _obj._ray.Direction);
if (cross == Vector3.Zero)
cross = _obj._side;
_obj._rotationQuaternion *= Quaternion.CreateFromAxisAngle(cross,angle);
}
// Updates direction, up, side vectors and model Matrix
_obj.UpdateMatrix();
しばらくすると、rotationQuaternionはX、Y、Z、Wでほぼゼロで満たされます。
何か助けはありますか?ありがとう ;-)