Jump to content
• Advertisement

Public Group

#### Archived

This topic is now archived and is closed to further replies.

# How do you use Quaternions to do rotations

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

If you intended to correct an error in the post then please contact us.

## Recommended Posts

Ok, I wan't to do rotations with quaternions, but I do not understand quaternions. What I want to do is rotate a given amount, but only rotate a little portion of it at a time. I also want to be able to get the angle of a rotation. Here is some of the code I am using (however, I have little clue as to what I am doing in the main part):
void DirectionalCameraRotator::updateCamera(const FrameEvent &evt)
{
long tmp;
Real rotateFactor = rotationDegreesPerSecond * evt.timeSinceLastFrame;

//update the camera on the Y axis

tmp = input->getMouseRelativeX();
if (invertRotations)
//invert the sign if we ARE inverting rotations

tmp ^= 0x80000000;
if (tmp < 0)
yaw(-rotateFactor); //cameraNode->yaw(-rotateFactor);

if (tmp > 0)
yaw(rotateFactor); //cameraNode->yaw(rotateFactor);

//update the camera on the X axis

tmp = input->getMouseRelativeY();
if (!invertRotations)
//invert the sign if we ARE NOT inverting rotations

tmp ^= 0x80000000;
if (tmp < 0)
pitch(-rotateFactor); //cameraNode->pitch(-rotateFactor);

if (tmp > 0)
pitch(rotateFactor); //cameraNode->pitch(rotateFactor);

//

//!!! THE REAL MEAT AND POTATOES PART OF THE FUNCTION !!!

//(so to speak)

//

Real theta;
Vector3 axis;
Quaternion deltaRotation;

//get the rotation

rotations.ToAngleAxis(theta, axis);

//restrict the rotation to the maximum

if (Math::Abs(theta) > rotateFactor) {
Real factor = rotateFactor / rotationDegreesPerSecond;
deltaRotation = Quaternion::Slerp(factor, Quaternion::IDENTITY, rotations);
rotations = rotations * deltaRotation.Inverse();
} else {
deltaRotation = rotations;
rotations = Quaternion::IDENTITY;
}

//set new rotation

cameraNode->rotate(deltaRotation);
}

u r what u bcome
[edited by - bcome on February 5, 2004 9:13:52 PM] [edited by - bcome on February 5, 2004 9:18:13 PM]

#### Share this post

##### Share on other sites
Advertisement
quote:
Original post by bcome
but I do not understand quaternions

There''s your problem. Learn them. There are many resources to help you.

#### Share this post

##### Share on other sites
yeah, start by reading the articles in the "Articles & Resources" section of this site on quaternions. there's enough there to get you understanding them farily well. Particularly the gamasutra article on quaterions is a great introductory article. Other than that, google for "quaternion tutorial" or something and read about it. you'll break your brain trying to just use quaternions in a zen way without any understanding of the math behind them. they are quirky and the only way to make your quaternion class work is to understand WHY they are quirky. things like order of operations are crucial in quaternions as is how modify them to represent new rotational states, etc. So read up.

-me

[edited by - Palidine on February 5, 2004 11:45:50 PM]

#### Share this post

##### Share on other sites

• Advertisement
• Advertisement

• ### Popular Contributors

1. 1
2. 2
3. 3
frob
12
4. 4
5. 5
• Advertisement
• ### Forum Statistics

• Total Topics
632130
• Total Posts
3004286

×

## Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!