Hi everybody
In my game, the user can look around using the mouse. The mouse position is translated into viewangle_vertical and viewangle_horizontal. I use those variables to compute the correct values for GLULookAt. That works great so far.
(Just to clarify: viewangle_vertical is always between -PI/2 and PI/2)
Now I'd like to have a model at the player location that looks in the same direction as the player does.
Similar to a Gun in a Shooter (the gun moves with the player, and always points in the player's direction).
I already have my Object Loader, so rendering the thing isn't a problem. Here's my rendering code: (simplieifed)
1 2 3 4 5 6 7 8 9 10 11 12 13
| glPushMatrix();
glLoadIdentity(); gluLookAt(pos.x, pos.y, pos.z, lookat.x, lookat.y, lookat.z, 0, 1, 0); glTranslated(x, y, z); glRotated(rot_x, 1, 0, 0); glRotated(rot_y, 0, 1, 0); glRotated(rot_z, 0, 0, 1); glPopMatrix(); |
I already figured out that
x = X part of Player's ViewVector
y = Y part of Player's ViewVector
z = Z part of Player's ViewVector
rot_y = viewangle_horizontal*RAD2ANG (RAD2ANG = 180.0 / Math.PI)
So as long as viewangle_vertical equals 0, this works perfectly. (My gun stays clearly visible in front of the player, and points away from the player)
If I look up or down, however, the Gun is at the correct position, but isn't rotated correctly (well, rot_x and rot_z = 0, so this isn't surprising)
I tried setting
1 2
| rot_x = Math.abs(Math.cos(viewangle_horizontal))*180; rot_z = Math.abs(Math.sin(viewangle_horizontal))*180; |
But this turns out VERY bad, the gun just flings aroundwith no clear pattern (I have no idea ;( )
Can you guys give me some pointers to a tutorial that deals with this kind of math?
Thanks