OliverMarsh
Oliver
109 posts
/ 2 projects
A budding game developer and programmer 
#16382
Using Quaternions for camera controller 5 months ago Edited by Oliver on Sept. 24, 2018, 1:02 a.m. Reason: Initial post
Hi,
I'm making a fps style camera in a 3d game and was learning about Quaternions. I just want the camera to have pitch and heading, but no bank. And not track euler angles over multiple frames. Whats the best way to do this? The code I have looks like this.
I was wondering if this looks correct and is it equivalent to the below code, which is tracking Euler angles over frames.
Also in the first code snippet, is:
the same as:
Thanks for your help, any info about the best way to use Quaternions would be great. 
mrmixer
Simon Anciaux
540 posts

#16414
Using Quaternions for camera controller 5 months ago
I can't help you much but according to wikipedia, quaternion multiplication isn't commutative.

forkingpaths
Martin Fouilleul
50 posts
/ 1 project
Sound Engineer / Programmer 
#16415
Using Quaternions for camera controller 5 months ago
Hello Oliver,
Imagine your heading is zero and your pitch is 45 degrees. Now you move the mouse to the left to produce a 90 degrees rotation. In your second snippet it will be ok, your heading is now 90 and your pitch is still 45. But in your first snippet the rotation will happen respective to your current orientation, so your new heading is 90 degrees, your new pitch is 0, and your bank is 45 degrees. So maybe I'm wrong but I think your two snippets are not equivalents. You probably want the second one, because a change in heading always produce a rotation around a vertical axis, whereas your first snippet a change in heading will produce a rotation around an axis which depends on your previous pitch/axis angles. Martin 
forkingpaths
Martin Fouilleul
50 posts
/ 1 project
Sound Engineer / Programmer 
#16416
Using Quaternions for camera controller 5 months ago
Also, as Simon said, quaternion multiplication is not commutative, since rotations of the unit sphere are not.
For instance, if you reverse my previous example and first rotate 90 degrees to the left, then 45 degrees up, you will end up with a different orientation (ie, heading = 90, pitch = 45, bank = 0). Martin 
OliverMarsh
Oliver
109 posts
/ 2 projects
A budding game developer and programmer 
#16417
Using Quaternions for camera controller 5 months ago Edited by Oliver on Sept. 26, 2018, 10:02 p.m.
Thanks Martin and Simon,
Yes I think I understand a bit better. The banking is what prompted the question, the camera seemed to introduce bank after looking around, and I couldn't understand why. Could you say the tracking euler angles method has knowledge of the original 'correct' orientation, i.e. looking down the z axis (since we only ever rotate once from this orientation), whereas the first snippet only knows of it's previous frame orientation? Thanks, Oliver 
forkingpaths
Martin Fouilleul
50 posts
/ 1 project
Sound Engineer / Programmer 
#16418
Using Quaternions for camera controller 4 months, 4 weeks ago
Yes you could put it that way.
In the euler angles method you always rotate from an original (x,y,z) basis. In the quaternion multiplication method, you rotate a basis attached to the camera itself, so the next rotation will happen relative to that new basis, and so on. Martin 