PDA

View Full Version : object staying in front of camera, please help



Dark_Streak
03-27-2002, 06:32 AM
Hello there everybody! Has anybody here managed to get a solid object constantly floating in front of the camera view? For example, a gun like in Fps's?

Based on some tutorials I followed, I have managed to create a small 3D world, where I can run around using keys and the mouse for direction. I have made a thin, long gun barrel out of a quadratic cylindar, and given it a nice texture. I am just struggling to get it behave now! It can rotate when I rotate, it moves on the X, Y and Z plane when I do, but I just cant get it to sit there pointing and moving in the right direction simultaneoulsy! This is a snippet of code which I am having the problem with:


glTranslatef(xtrans, ytrans, ztrans); // Translate The Scene Based On my Position

glPushMatrix();

glTranslatef(-xtrans, -(ytrans + 0.12f), -ztrans); //Here I am moving the gun to the same location as me. (adding 0.12f to the Y axis to let the gun float at a certain height.)

glRotatef(-sceneroty,0,1.0f,0); //To rotate gun based on 'sceneroty' which is calculated from mouse coords

glBindTexture(GL_TEXTURE_2D, texture[4]); //add the gun texture

gluCylinder(quadratic,0.02f,0.02f,1.0f,40,40); //The Cylinder for my gun.

glPopMatrix();


Now when I run this, the barrel does follow me around, and it also rotates correctly along with my rotation. The problem is that when I start, it is pointed behind me!! So if I try translate it in front of my (by adding some amount to the Z axis) the barrel no longer rotates around me. AAAARGH!

Are there any algorithms out there I havent found yet which cover this sort of thing? Surely loads of people must have made a FPS shooter here who can help me.
Any ideas would be greatly appreciated, Thanks!

Rob The Bloke
03-27-2002, 06:37 AM
Draw the gun first infront of the camera then transform the camera to the player position and draw the level. (or the other way round and use a glLoadIdentity call)

Dark_Streak
03-27-2002, 06:53 AM
Hi, thanks for reply but I have just tried that, and all sorts goes wrong. It is so annoying, because I am so close, and yet so far. My gun is moving perfectly, except it is pointing behind me i.e. I can only see it if I move the mouse so that I am looking behind me, upside down. There it is, following me, and even rotating to point where I am am looking. But it's behind me. http://www.opengl.org/discussion_boards/ubb/frown.gif

If any one is willing to help, I will gladly send them all my code. It is only very small at the moment (one cpp file). I have been trying to solve this for days now, Please help!

Furrage
03-27-2002, 10:09 AM
Each frame...
1) Save your matrix (glPushMatrix)
2) Draw your gun. You might have to translate it -z to be able to see it in front of the camera.
3) Restore your matrix (glPopMatrix).
4) Perform your camera transforms (gluLookAt)
5) Draw the rest of the world.