To main page | 3dengine.org
gluLookAt and Strafe
Strafe (C++)
If you're using
gluLookAt, you already have eye and center point, so to make a person strafe, you need to add or subtract
right vector from both "eye" coordinate and
center coordinate.
The
right vector is modelview's 0,4,8 (see
Right-up-back from modelview).
(Strafe
right, In C++)
GLdouble m[16];
glGetDoublev(GL_MODELVIEW_MATRIX, m);
// strafe right
eye_x += m[0];
eye_y += m[4];
eye_z += m[8];
center_x += m[0];
center_y += m[4];
center_z += m[8];
gluLookAt(eye_x, eye_y, eye_z, center_x, center_y, center_z,
up_x, up_y, up_z)
(Strafe
left, In C++)
To strafe left, replace every "+=" with "-=" (i.e. do the same, but with opposite sign).
If that doesn't work correctly (because possibly you are working with transposed matrices), try m[0],m[1],m[2] instead of m[0],m[4],m[8] respectively.
up_x, up_y, up_z (up vector) is yours to calculate (you should have it already, if you are using gluLookAt).
Better way
Alternatively see
Freelook spectator on how to do all this without gluLookAt, for mouselook and correct up vector.