#### Archived

This topic is now archived and is closed to further replies.

# moving camera?

This topic is 5986 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

i am new to 3d programming and opengl, and i am still playing around trying to get the basics. some months ago i did a clone of the old classic sokoban using directx. since the logic and gameplay is very simple i thought it would be a good exercise trying to convert it to 3d. however i there is something fundamental i don't understand about camera movement. i hope someone reading this can help me out. what i did was to simply convert my 2d tile rendering code to 3d rendering. what i do is loop through an array containing the level data, and render to the screen. basically all i do is render a lot of textured cubes to the screen. since i don't understand camera movement i render using X Y coordinates creating the illusion of a top down perspective, but i will switch to X Z rendering as soon as i get the right camera perspective working. i would like to be able to look at the map from an isometric angle or something, but i can't get the gluLookAt function to work, since i am doing something wrong in my map rendering. i am still in a learning phase, started out 3d programming only last week. thanks in advance! if necessary i will post more info...
  // Part of rendering code glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); for (int z=0; z < MAPSIZE_Z; z++) for (int x=0; x < MAPSIZE_X; x++) { glLoadIdentity(); // zdepth is just a temp float used for zooming glTranslatef (x*2.0f, z*2.0f, zdepth); // i have to rotate since i switched from X Z // to X Y rendering. this makes the cubes face the // camera the right way glRotatef (90.0f, 1.0f, 0.0f, 0.0f); switch (map[x][z]) { case EMPTY: break; case WALL: glBindTexture (GL_TEXTURE_2D, texture[0]); glCallList(box); break; case FLOOR: glBindTexture (GL_TEXTURE_2D, texture[1]); glBegin(GL_QUADS); // code for drawing textured quad glEnd(); break; case BOX: glBindTexture (GL_TEXTURE_2D, texture[3]); glCallList(box); break; default: break; } // end switch } // end for // Some game logic goes here glFlush(); SwapBuffers(g_HDC); // End of rendering code 
Edited by - en3my on September 1, 2001 4:40:22 PM Edited by - en3my on September 1, 2001 4:41:55 PM

##### Share on other sites
Matrix multiplication is not commutative... where you call gluLookAt in relation to glTranslate, glRotate, etc. matters. Make sure you have the order right.

##### Share on other sites
I tried calling gluLookAt() after my first call to glLoadIdentity() (before entering the for loop)... But it didn''t work...

##### Share on other sites
Is your current matrix set to the model/view matrix ?

ECKILLER

##### Share on other sites
i did some experiments and placed the gluLookAt call inside the for loops, and it works... i still don''t understand why, so please explain if you know what is going on...

  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();for (int z=0; z < MAPSIZE_Z; z++) for (int x=0; x < MAPSIZE_X; x++) { glLoadIdentity(); gluLookAt(0.0f, 0.0f ,15.0f, 0.0f, 60.0f, -100.0f, 0.0f, 1.0f, 0.0f);

##### Share on other sites
glLoadIdentity resets the transformation matrix. So if you called it after gluLookAt, gluLookAt''s effect would be nullified.

##### Share on other sites
You shouldn''t need to call gluLookAt each time it loops. Call it once (after a glLoadIdentity, outside the loop), then inside the loop use a glPushMatrix at the beginning, and a glPopMatrix at the end.

[Resist Windows XP''s Invasive Production Activation Technology!]

##### Share on other sites
thanks guys! now i have a better understanding on how things work!