# Thread: OpenGL first person camera orientation issues

1. ## OpenGL first person camera orientation issues

I have a "camera" in my opengl program that I recently finished. However, I've noticed that whenever I rotate and then move again, the x, y, and z angles change. For example, when I press the "w" key, I move forward along the "z" axis. If I then rotate the camera 90 degrees, when I push the "W" key, I will actually be moving right, seemingly along the "x" axis. It makes sense why this happens, I'm just wondering why its happening. Here's the rotation function:

Code :
private void camera() {
glRotatef(xrot, 1.0f, 0.0f, 0.0f);
glRotatef(yrot, 0.0f, 1.0f, 0.0f);
}
The keyboard function:

Code :
if (Keyboard.isKeyDown(Keyboard.KEY_D)) {
xpos -= 0.035 * delta;
}

if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
xpos += 0.035 * delta;
}

if (Keyboard.isKeyDown(Keyboard.KEY_W)) {
zpos += 0.03f * delta;
}

if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
zpos -= 0.035 * delta;
}
if (Keyboard.isKeyDown(Keyboard.KEY_UP)) {
xrot += 0.035;
if (xrot > 360) {
xrot -= 360;
}
}

if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
xrot -= 0.035;
if (xrot > 360) {
xrot += 360;
}
}

if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
yrot += 0.035;
if (xrot > 360) {
xrot -= 360;
}
}

if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {
yrot -= 0.035;
if (xrot > 360) {
xrot += 360;
}

}
And my translate function:

Code :
glTranslated(xpos, ypos, zpos - 30);
any ideas on how to solve this? I would be very grateful.

2. You are moving it along the axes, not along the view direction. Increment the position by the view direction vector. You can get it using the x and y angles, or you can extract it from the view matrix.The 3rd row is the negated view direction. So you can do:

Code :
float matrix[16];glGetFloatv(GL_MODELVIEW_MATRIX, matrix)

Vector3 viewVec = Vector3(-matrix[2], -matrix[6], -matrix[10]);

or:

Code :
{
Vector3 dir;

return dir;
}

3. Well thats makes sense. But what is sinf? Is that the inverse of sin? Also, is the above method just for the y direction?

4. Originally Posted by opiop65
Well thats makes sense. But what is sinf? Is that the inverse of sin?
It's just the 32-bit float version of sin(). Check your man pages or standard C library docs:

Code cpp:
double sin(double x);
float sinf(float x);
long double sinl(long double x);

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•