I would like to shoot spheres in the current view direction in a simple scene. I use an FPS camera, so no z-rotation. The vector pointing in the correct direction should be
(m, m, m) where
m is the modelview matrix as returned by
In my understanding that vector is normalized, so when I scale it by some scalar its length will equal that scalar. If I draw an object every frame and translate it by the scaled z-axis vector (plus camera position), the object should be directly in front of me, all the time, right?
However, when I run my program, the object is not in front of me all the time. It is in front of me, as long as no rotation around the y-axis is done. Here is the relevant (I think) source code:
/* camera */ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotatef(g_cam.rx, 1, 0, 0); glRotatef(g_cam.ry, 0, 1, 0); glTranslatef(-g_cam.tx, -g_cam.ty, -g_cam.tz); /* get z-axis vector */ double mm; glGetDoublev(GL_MODELVIEW_MATRIX, mm); /* should be in front of me, all the time */ glPushMatrix(); glTranslatef(g_cam.tx + 10 * mm, g_cam.ty + 10 * mm, g_cam.tz - 10 * mm); glColor3f(0, 0, 1); glCullFace(GL_FRONT); glutSolidTeapot(2); glCullFace(GL_BACK); glPopMatrix();
Note that this is not about how to place an object in front of me all the time, but rather what is wrong with my understanding, that using the z-axis vector does not work here.
I know that this is a frequent question, because I found lots of material on the internet. However, I seem to be missing something yet. It would be great if you could help me with it :)
If the problem is not as obvious as I think it is, I can prepare a small example demonstrating the issue.