Hello, I am trying to recreate the classic game Asteroid https://upload.wikimedia.org/wikipedia/en/1/13/Asteroi1.png using OpenGL. So far I have drawn a ship, some text and a test asteroid. I have set up controls such that UP arrow moves the ship forwards, LEFT and RIGHT keys rotate the ship.
[ATTACH=CONFIG]1413[/ATTACH]
The problem lies in the rotation. When I attempt to rotate the ship, everything in the screen rotates as well.
[ATTACH=CONFIG]1414[/ATTACH]
However I only want the ship to move. How can I do this?
Here is my draw function:
void draw() {
glClear(GL_COLOR_BUFFER_BIT); // Clear display window.
myWorld.draw_world();
char *score = {"Score: "};
glRasterPos2f(1, 14);
print_bitmap_string(GLUT_BITMAP_9_BY_15, score);
myWorld.shipType[selection]->rotate(myWorld.shipType[selection]->center[0], myWorld.shipType[selection]->center[1],angle);
glFlush();
}
and the rotation function looks like this:
void Shape2D::rotate(GLfloat rx, GLfloat ry, GLfloat angle){
// rx and ry is the coordinate for the center point of the ship
glTranslatef(rx, ry, 0);
glRotatef(angle, 0., 0., 1.);
glTranslatef(-rx, -ry, 0);
}
myWorld.draw_world just simply draws the ship onto the screen:
void World::draw_world() {
//draw triangle
if (selection == 0) {
shipType[0]->draw();
}
// draw square
else if (selection == 1) {
shipType[1]->draw();
} else if (selection == 2) {
shipType[2]->draw();
}
// draw test asteroid
myAsteroid->draw();
}