OpenGL - déplacer la caméra avec la souris

Je ne sais pas exactement comment expliquer cela, mais j'espère que vous comprendrez ce que je veux dire.

Fondamentalement, j'ai dessiné un cube et faire glisser la souris autour de vous pour voir tous les côtés.
Rotation uniquement à l'horizontale ou à la verticale est bien, mais si j'essaie de les combiner ensuite les choses vont un peu bizarre.

par exemple, si j'effectue une rotation de 180 degrés à la verticale (pour obtenir 'upside down'), puis faites glisser la souris horizontalement puis le cube tourne dans la direction opposée au mouvement de la souris.

C'est le code correspondant:

double camera_angle_h = 0;
double camera_angle_v = 0;

int drag_x_origin;
int drag_y_origin;
int dragging = 0;

void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    gluLookAt(0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    glRotated(camera_angle_v, 1.0, 0.0, 0.0);
    glRotated(camera_angle_h, 0.0, 1.0, 0.0);

    draw_cube();

    glFlush();
    glutSwapBuffers();
}

void mouse_click(int button, int state, int x, int y) {
    if(button == GLUT_LEFT_BUTTON) {
        if(state == GLUT_DOWN) {
            dragging = 1;
            drag_x_origin = x;
            drag_y_origin = y;
        }
        else
            dragging = 0;
    }
}

void mouse_move(int x, int y) {
    if(dragging) {
        camera_angle_v += (y - drag_y_origin)*0.3;
        camera_angle_h += (x - drag_x_origin)*0.3;
        drag_x_origin = x;
        drag_y_origin = y;
    }
}

OriginalL'auteur | 2009-09-15