• Advertisement

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.

If you intended to correct an error in the post then please contact us.

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 this post


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

Share this post


Link to post
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 this post


Link to post
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 this post


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

Share this post


Link to post
Share on other sites

  • Advertisement