Jump to content
  • Advertisement
Sign in to follow this  
denuo_

OpenGL gimbal lock? quaternions? complex numbers?

This topic is 4856 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

Hi! I decided, two weeks ago, to create a simple 3D game using D3D. Everything was going well until I had to rotate (drag) this object using the mouse. I tried this using the D3DXMatrixRotation function, but the result was, I found later, a gimbal lock... I searched everywhere (including gamedev articles) for a nice tutorial about quaternions, but they're all very mathematical or oriented to OpenGL... The DirectX SDK's explanation is very abstract and the samples are just too complicated for my actual directx/math knowledge... I don't want the all code (I'm also avoiding to use d3dutil functions), but an example would be nice - maybe a tutorial... Please, forgive my terrible english. Thanks in advance.

Share this post


Link to post
Share on other sites
Advertisement
Sorry I can't offer more help, but this is a decent explanation of quaternions. Wikipedia actually has an article on using quaternions for rotations here, but it's overly technical so you probably won't find it as much help, but it can't hurt giving it a look.

Edit: Also, Daerax, a member here of GameDev.net, recently posted a huge journal entry on quaternions which you can view here.

Share this post


Link to post
Share on other sites
Which D3DXMatrixRotation function did you use? What caused the gimbal lock? Simply inserting quaternions into your code won't magically cure gimbal lock (since using a matrix also prevents gimbal lock and you are already using one).

Share this post


Link to post
Share on other sites
Hi again!
I'm really sorry to bother you people again but I just can't solve this rotation problem... I will try to explain better this time:

The code I have is:

void Object::MouseMove(long lMouseXPos, long lMouseYPos, long lMouseOldXPos, long lMouseOldYPos)
{
if (m_bRotating)
{
m_fYRot -= (float) (lMouseXPos - lMouseOldXPos) / 100.0f;
m_fXRot -= (float) (lMouseYPos - lMouseOldYPos) / 100.0f;
D3DXMatrixRotationYawPitchRoll(&m_matObject, m_fYRot, m_fXRot, m_fZRot);
m_lpDevice->SetTransform(D3DTS_WORLD, &m_matObject);
Render();
}
...
}

Mouse left and right for Yaw rotation... Up and Down for Pitch rotation...

When the Yaw rotation is 0.0f, the Pitch rotates the direction I want...
The problem is that when the Yaw rotation is equal to 3.14f, and I drag the mouse down, the Pitch rotation inverts... Is this a math problem? If so, please elucidate me...

Thanks again

Share this post


Link to post
Share on other sites
That behavior may be correct(your description is a little ambiguous). Think of it this way: Your friend is facing you. He pitches his head in a positive direction and his face points up (for example). Then he turns around facing away from you and pitches his head again in a positive direction. Again, his face will point up, but the back of his head (which is what you see) points down. Is that what is happening?

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

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

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!