# Quaternions, rotate a model and align with a direction

This topic is 1901 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...

 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(); 

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...

 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(); 

I have normalized the cross and quaternion...

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