I have a problem understanding quaternions rotation in OpenGL. So far I have implemented all function and operators related to quaternions.They are definitely working right!. However I can't find where I'm making the mistake within rotation function.
Let's say I have a a cube in 3d space at (xyz)
(1, 5, 2) if I am not wrong the position in 4D is
p = 0 + i + 5j + 2k, and the orientation and rotation
(0, 0, 0, 0) in 4D space is
q = 1 + 0i + 0j + 0k
Now I want to rotate it by 30 degrees along y-axis.
q = cos(a / 2) + (ix + jy + kz)sin(a/2)
So 30 degrees along y-axis is
Pout = q * Pin * con(q) Q = q * Pin = (0.96 + 0.25j) * (0 + 1i + 5j + 2k) = -1.25 + 1.46 + 4.8 + 1.67
Shall I normalize it now or not?
conj(q) = 0.96 - 0.25j Pout = Q * con(q) = 0 + 1.81 + 4.92 + 1.32
q = 0 + 0.33i + 0.91j + 0.22k
This is definitely the wrong answer according to this site
Rotating the object along the Y-axis by 30 degrees from a point
(0,0,0) gives the correct result just by computing
q. If I use the above algorithm and multiply it by
Pin I get
Can you show me how to do it right step by step?
Also how do I to orbit one point along another. Lets say I have the given point above and I want it to orbit around the point
(2, 10, -2) using quaternions.
And when I manage to get the correct quaternion, how do I use it in the proper way along with openGL
So far my program runs like this:
- Quaternion = x, y, z of object
- Compute Rotation by X degrees along axes.
- Quaternion to Axis Angle
glRotatef(by result of point 3)
- Quaternion = result of point 2
- Go to point 2
- Go to step 1
Do I always have to change quaternions to Axis-angles, or is there another way which allow me to represent the rotation without conversion?