Dan M

03-28-2010, 02:08 PM

Hi,

I've implemented an A* pathfinder in C++ and would like to display the grid (which can be 3d) and the route it's found in OpenGL. I've created an application using GLUT which sets the coordinate system to <-1, -1, gridWidth+1, gridHeight+1, -1, gridDepth+1> and creates a number of cubes which represent obstacles and cubes which represent nodes on the grid that contribute to the route found.

I've come somewhat unstuck however when it comes to implementing a way of rotating the scene. I've read and tried to follow a number of tutorials but feel as if I've missed something somewhat significant. For example, when I follow them I can't seem to find the right values to start off with for gluLookAt.

Do the parameters of of gluLookAt work like this:

eyeX, eyeY, eyeZ: The location of the camera? Where is this set to by default? I guess that this, along with the angle specified in gluPerspective, determines what 'quantity' of the grid we can see?

centerX, centerY, centerZ: A point in the coordinate system where the camera focuses? So I'd want this to intially be <gridWidth/2, gridHeight/2, 0> initially?

upX, upY, upZ This is the same as 'yaw'?

The relevant code I have currently looks like this:

void display(void){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//Make cubes for every obstacle in the 3d world.

for(int y=m.height()-1; y>=0; y--){

for(int x=0; x<m.width(); x++){

for(int z=0; z<m.depth(); z++){

if(!m.at(x, y, z)->obstacle) continue;

glPushMatrix();

glTranslatef(x+0.5, y+0.5, z+0.5); //Move this cube to its coordinates in the map (and align to the window).

glutSolidCube(1);

glPopMatrix();

}

}

}

for(int n=0; n<route.size(); n++){

glPushMatrix();

glTranslatef(route.at(n)->x+0.5, route.at(n)->y+0.5, route.at(n)->z+0.5);

glutSolidCube(0.5);

glPopMatrix();

}

glutSwapBuffers();

}

void reshape(int width, int height){

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glViewport(0, 0, width, height);

glOrtho(-1, w+1, -1, h+1,-1,d+1); // Set the coordinate system's units in scale with our own map.

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

http://www.lighthouse3d.com/opengl/glut/index.php?6 was a good tutorial but I think I need to change the initial values it sets because of my change in coordinate system? Preemptive thanks to anyone who can help me.

I've implemented an A* pathfinder in C++ and would like to display the grid (which can be 3d) and the route it's found in OpenGL. I've created an application using GLUT which sets the coordinate system to <-1, -1, gridWidth+1, gridHeight+1, -1, gridDepth+1> and creates a number of cubes which represent obstacles and cubes which represent nodes on the grid that contribute to the route found.

I've come somewhat unstuck however when it comes to implementing a way of rotating the scene. I've read and tried to follow a number of tutorials but feel as if I've missed something somewhat significant. For example, when I follow them I can't seem to find the right values to start off with for gluLookAt.

Do the parameters of of gluLookAt work like this:

eyeX, eyeY, eyeZ: The location of the camera? Where is this set to by default? I guess that this, along with the angle specified in gluPerspective, determines what 'quantity' of the grid we can see?

centerX, centerY, centerZ: A point in the coordinate system where the camera focuses? So I'd want this to intially be <gridWidth/2, gridHeight/2, 0> initially?

upX, upY, upZ This is the same as 'yaw'?

The relevant code I have currently looks like this:

void display(void){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//Make cubes for every obstacle in the 3d world.

for(int y=m.height()-1; y>=0; y--){

for(int x=0; x<m.width(); x++){

for(int z=0; z<m.depth(); z++){

if(!m.at(x, y, z)->obstacle) continue;

glPushMatrix();

glTranslatef(x+0.5, y+0.5, z+0.5); //Move this cube to its coordinates in the map (and align to the window).

glutSolidCube(1);

glPopMatrix();

}

}

}

for(int n=0; n<route.size(); n++){

glPushMatrix();

glTranslatef(route.at(n)->x+0.5, route.at(n)->y+0.5, route.at(n)->z+0.5);

glutSolidCube(0.5);

glPopMatrix();

}

glutSwapBuffers();

}

void reshape(int width, int height){

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glViewport(0, 0, width, height);

glOrtho(-1, w+1, -1, h+1,-1,d+1); // Set the coordinate system's units in scale with our own map.

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

http://www.lighthouse3d.com/opengl/glut/index.php?6 was a good tutorial but I think I need to change the initial values it sets because of my change in coordinate system? Preemptive thanks to anyone who can help me.