How do I position a 2D camera in OpenGL?
- by Elfayer
I can't understand how the camera is working.
It's a 2D game, so I'm displaying a game map from (0, 0, 0) to (mapSizeX, 0, mapSizeY).
I'm initializing the camera as follow :
Camera::Camera(void)
: position_(0.0f, 0.0f, 0.0f), rotation_(0.0f, 0.0f, -1.0f)
{}
void Camera::initialize(void)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glTranslatef(position_.x, position_.y, position_.z);
gluPerspective(70.0f, 800.0f/600.0f, 1.0f, 10000.0f);
gluLookAt(0.0f, 6000.0f, 0.0f,
0.0f, 0.0f, -1.0f,
0.0f, 1.0f, 0.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
}
So the camera is looking down. I currently see the up right border of the map in the center of my window and the map expand to the down left border of my window. I would like to center the map.
The logical thing to do should be to move the camera to eyeX = mapSizeX / 2 and the same for z. My map has 10 x 10 cases with CASE = 400, so I should have :
gluLookAt((10 / 2) * CASE /* = 2000 */, 6000.0f, (10 / 2) * CASE /* = 2000 */,
0.0f, 0.0f, -1.0f,
0.0f, 1.0f, 0.0f);
But that doesn't move the camera, but seems to rotate it.
Am I doing something wrong?
EDIT :
I tried that:
gluLookAt(2000.0f, 6000.0f, 0.0f,
2000.0f, 0.0f, -1.0f,
0.0f, 1.0f, 0.0f);
Which correctly moves the map in the middle of the window in width. But I can't move if correctly in height. It always returns the axis Z. When I go up, It goes down and the same for right and left.
I don't see the map anymore when I do :
gluLookAt(2000.0f, 6000.0f, 2000.0f,
2000.0f, 0.0f, 2000.0f,
0.0f, 1.0f, 0.0f);