Going back into study mode

posted in IfThen Software
Published June 10, 2011
Advertisement
Yesterday I made it so that you could control the pitch, heading, and roll of your ship using the mouse and cursor keys. Pitch and heading adjustment works fine, but roll is dependent on the direction that your ship is facing; I actually suspect that the other two have similar problems as well, just not as pronounced. This led me to start reading through physics articles to try and find a solution.

While reading the articles I was reminded that I still don't know much about mathematical programming (linear, quadratic...), which seems to pop up a lot in physics and makes an appearance in collision detection. I figure this is as good a time as any to correct that, so I have started going through the free classes on the Stanford website located here: http://www.stanford.edu/~boyd/ Class EE263 is a prerequisite for the convex optimization classes, so I'm starting there. If this starts taking too long, I may decide to postpone further study in this area, but hopefully I won't have to.

Writing blog entries will be a bit challenging for a variety of reasons, but the plan is to continue updating at least five times per week. The last thing I want to do is just repeat what's said in the lectures, so I may draw from multiple sources when I discuss what I have learned.

Reposted from http://invisiblegdev.blogspot.com/
Previous Entry Skybox
0 likes 3 comments

Comments

weasalmongler
The way I perform pitch heading and roll is to store rotation as a 3x3 matrix (or a quaternion). Then when you update any of the pitch/head/roll angles, just create a new rotation matrix (or quat) for each around x,y or z respectively and multiply the current 3x3 rotation matrix by these news ones to update the rotation. This might not be the cheapest way of doing it but it definitely works, avoids gimbal lock etc etc.
June 10, 2011 12:40 PM
KaRei
Yes. Each rotation you make does not only rotate the model itself, but also the other axes with the model. So the next rotation you make is influenced by the previously made rotations. You need to make the rotations in exact order the player do them. If he rotates 5° by X, then 10° by Y, and then 3° again by X, you can't simply rotate by 8° by X and 10° by Y. You have to make the rotations exactly as they came from player.

You can do that by storing your actual rotation matrix. When player will then want to rotate by 5° by X, rotate the matrix you have stored:

[i]actualRotationMatrix = matrixOfWantedRotation * actualRotationMatrix[/i]

This way each rotation you make is incorporated in the final rotation matrix in the order it was made :wink:
June 10, 2011 04:53 PM
VBStrider
Thanks for the tip!
June 11, 2011 04:25 AM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement