Jump to content

View more

Image of the Day

#ld38 #screenshotsaturday Mimosa Fizz action gif #2 https://t.co/TUzdppvfUL
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.


Sign up now

Quaternions, rotate a model and align with a direction

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.


  • You cannot reply to this topic
4 replies to this topic

#1 hdlopesrocha   Members   

145
Like
0Likes
Like

Posted 06 November 2012 - 03:09 PM

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

#2 max343   Members   

346
Like
0Likes
Like

Posted 06 November 2012 - 06:49 PM

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.

#3 hdlopesrocha   Members   

145
Like
0Likes
Like

Posted 07 November 2012 - 06:43 AM

Mmmm, probably it's that...

#4 hdlopesrocha   Members   

145
Like
0Likes
Like

Posted 07 November 2012 - 01:47 PM

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

#5 max343   Members   

346
Like
0Likes
Like

Posted 07 November 2012 - 03:14 PM

"Like crazy" in a good or bad way?




Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.