Hello all,
I am new here and new to OpenGL. For a school project, I am trying to use OpenGL and GLUT to render a city scene with multiple buildings in it. Then, I have to do a camera “fly through” around the city and capture the whole process.
I have the city properly rendered. But I have ran into a issue with coding proper control for my camera.
I will try to explain my approach here as clear as possible without going on forever:
What I am trying to do is to control my camera, or more accurately the movement of the scene, in ways similar to a first person video game.
Here is what I mean:
‘w’ - Move Forward
‘s’ - Move Backward
‘a’ - Turn Left
‘d’ - Turn Right
‘q’ - Strafe Left
‘e’ - Strafe Right
I implemented this by changing the parameters inside gluLookAt()and by rotating the scene as needed.
Here is how I set up my gluLookAt():
gluLookAt(xPos,yPos,zPos, xLookAt,yLookAt,zLookAt, 0,1,0);
So, for example, every time I press, say ‘w’(Forward), zPos and zLookAt are decremented for a certain amount. Likewise, if I press ‘q’(Strafe Right), xPos and xLookAt are decremented for a set amount, so on and so forth.
To turn and face a different direction, I rotate the scene instead of rotating the camera (Mainly because I don’t know how to rotate the camera). So, when ‘a’ is pressed,I decrements a valuable call angle_x and perform the rotation like so: glRotatef(Transformations::angle_x, 0.0, 1.0, 0.0);
To make the rotation seems like it is rotating about the camera, I do the following:
glTranslatef(xPos,yPos,zPos);
glRotatef(Transformations::angle_x, 0.0, 1.0, 0.0);
glTranslatef(-xPos,-yPos,-zPos);
drawBuildings();
Everything works perfect except for one thing. I cannot change the orientation of the camera after the rotation. So imagine forward is pointing North initially and I make a 90 degree rotation and I am now appeared to be looking toward East. If I press forward on my keyboard now my camera still moves toward north, which now would appears to be moving to the left and not what I want.
I have tried many ways of messing with the order of translation and rotation and I still couldn’t figure out a solution. I looked through the internet and found people talking about updating the direction vector of the camera or something like that but I couldn’t understand their approach posted.
I am hoping someone here would be able to give me some idea as to what I can do. Any comment would be greatly appreciated!
Thank you very much for reading so much!