Jump to content

  • Log In with Google      Sign In   
  • Create Account

moving camera?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
7 replies to this topic

#1 En3my   Members   -  Reputation: 122

Like
Likes
Like

Posted 01 September 2001 - 09:34 AM

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

Sponsor:

#2 Sneftel   Senior Moderators   -  Reputation: 1781

Like
Likes
Like

Posted 01 September 2001 - 10:18 AM

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

#3 En3my   Members   -  Reputation: 122

Like
Likes
Like

Posted 01 September 2001 - 10:40 AM

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

#4 ECKILLER   Members   -  Reputation: 122

Like
Likes
Like

Posted 01 September 2001 - 11:09 AM

Is your current matrix set to the model/view matrix ?

ECKILLER

#5 En3my   Members   -  Reputation: 122

Like
Likes
Like

Posted 01 September 2001 - 11:12 AM

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);


#6 Sneftel   Senior Moderators   -  Reputation: 1781

Like
Likes
Like

Posted 01 September 2001 - 11:18 AM

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


#7 Null and Void   Moderators   -  Reputation: 1087

Like
Likes
Like

Posted 01 September 2001 - 11:20 AM

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!]

#8 En3my   Members   -  Reputation: 122

Like
Likes
Like

Posted 01 September 2001 - 09:01 PM

thanks guys! now i have a better understanding on how things work!




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS