# Quaternions, rotate a model and align with a direction

This topic is 1896 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Suppose you have quaternion that describes the rotation of a 3D Model.
What I want to do is, given an Object (with rotationQuaternion, side vector...), I want to align it to a target point.
For a spaceship, I want the cockpit to point to a target.
Here is some code I have ... It's not doing what I want and I don't know why...

[CODE]
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();
[/CODE]

after some time the rotationQuaternion is filled with almost Zero at X,Y,Z and W
Any help? Thanks ;-)

##### Share on other sites
Do you normalize your final quaternions before transforming them into a matrix (or just at the end of the frame)? If not then you should.

##### Share on other sites
Mmmm, probably it's that...

##### Share on other sites
ok now it's rotating like crazy...

[CODE]
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);

cross = (cross == Vector3.Zero) ? _obj._side : Vector3.Normalize(cross);

_obj._rotationQuaternion *= Quaternion.CreateFromAxisAngle(cross,angle);
_obj._rotationQuaternion.Normalize();
}
_obj.UpdateMatrix();
[/CODE]

I have normalized the cross and quaternion...

##### Share on other sites
"Like crazy" in a good or bad way?

##### Share on other sites

This topic is 1896 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.