Предположим, у вас есть кватернион, описывающий вращение 3D-модели.
Что я хочу сделать, так это, учитывая объект (с вращениемQuaternion, боковым вектором...), я хочу выровнять его по целевой точке.
Для космического корабля я хочу, чтобы кабина указывала на цель.
Вот некоторый код, который у меня есть... Он не делает то, что я хочу, и я не знаю, почему...
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();
через некоторое время кватернион вращения заполняется почти нулем в точках X, Y, Z и W
Любая помощь? Спасибо ;-)