Original Post
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...
Edited by - en3my on September 1, 2001 4:40:22 PM
Edited by - en3my on September 1, 2001 4:41:55 PM
// 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
|