// This callback function gets called by the Glut // system whenever it decides things need to be redrawn. void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glLoadIdentity(); double dt = GetDeltaTime(); if (gFirstPerson) { double rad = gRat.getDegrees()/180.0 * M_PI; double dx = cos(rad) * MOVE_SPEED * dt; double dy = sin(rad) * MOVE_SPEED * dt; double hover = 2.0; double terrainHeight = gMaze.getZ(gRat.getX() + dx, gRat.getY() + dy); double waterHeight = gWaterHeight + .4; double H = fmax(terrainHeight, waterHeight) + hover; double currentTerrainHeight = fmax(waterHeight, gMaze.getZ(gRat.getX(), gRat.getY())); double tilt = (fmax(terrainHeight, waterHeight) - currentTerrainHeight); double lookZ = H + tilt; gluLookAt(gRat.getX(), gRat.getY(), H, gRat.getX() + dx, gRat.getY() + dy, lookZ, 0, 0, 1); // when doing rat, calculate at point but z will stay. } else { gluLookAt(M*.5, -N*.5, 15, M*.5, N*.5, 0, 0, 0, 1); // 3 eye, 3 at point, 3 z-axis up } gMaze.draw(gWaterHeight); gRat.draw(gFirstPerson); if (gLeft) gRat.spinLeft(dt); if (gRight) gRat.spinRight(dt); if (gMiddle) gRat.move(dt); if (gFirstPerson) { gluPerspective(.02, (double)screen_x/screen_y, .0001, .0001); } else { gluPerspective(40, (double)screen_x/screen_y, RES*.5, 3*(RES+RES)); } glutSwapBuffers(); glutPostRedisplay(); }
// This callback function gets called by the Glut // system whenever it decides things need to be redrawn. void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glLoadIdentity(); double dt = GetDeltaTime(); if (gFirstPerson) { double rad = gRat.getDegrees()/180.0 * M_PI; double dx = cos(rad) * MOVE_SPEED * dt; double dy = sin(rad) * MOVE_SPEED * dt; gluLookAt(gRat.getX(), gRat.getY(), gRatHeight, gRat.getX() + dx, gRat.getY() + dy, gRatHeight, 0, 0, 1); // when doing rat, calculate at point but z will stay. } else { gluLookAt(M*.5, -N*.5, 15, M*.5, N*.5, 0, 0, 0, 1); // 3 eye, 3 at point, 3 z-axis up } gMaze.draw(); gRat.draw(gFirstPerson); if (gLeft) gRat.spinLeft(dt); if (gRight) gRat.spinRight(dt); if (gMiddle) gRat.move(dt); if (gFirstPerson) { gluPerspective(.02, (double)screen_x/screen_y, .0001, .0001); } else { gluPerspective(40, (double)screen_x/screen_y, N*.5, 3*(M+N)); } glutSwapBuffers(); glutPostRedisplay(); }
// This callback function gets called by the Glut // system whenever it decides things need to be redrawn. void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (current_view == perspective_view) { glEnable(GL_DEPTH_TEST); glLoadIdentity(); gluLookAt(-3,-3,7, 3,3,0, 0,0,1); } else if (current_view == top_view){ glDisable(GL_DEPTH_TEST); glLoadIdentity(); } else if (current_view == rat_view){ glEnable(GL_DEPTH_TEST); glLoadIdentity(); double z_level = .25; double x = gRat.getX(); double y = gRat.getY(); //problem with dx and dy double dx = gRat.getdX(); double dy = gRat.getdY(); //double at_x = x + dx; //double at_y = y + dy; double at_x =gRat.getNextX() ; double at_y =gRat.getNextY() ; double at_z = z_level; //std::cout<<dx<<" "<<at_x<<"----"<<dy<<" "<<at_y<<std::endl; gluLookAt(x,y,z_level, at_x, at_y, at_z, 0,0,1); //gluLookAt(x,y,z_level, 360, 360, at_z, 0,0,1); } gMaze.Draw(current_view); if(gMiddleButtonDown) { gRat.Scuttle(gMaze); glutPostRedisplay(); } if(gLeftButtonDown){ gRat.SpinLeft(); glutPostRedisplay(); } if(gRightButtonDown){ gRat.SpinRight(); glutPostRedisplay(); } gRat.Draw(current_view); glutSwapBuffers(); }