OpenGL - движущаяся камера с мышью

Я не уверен, как именно это объяснить, но, надеюсь, выпоймешь о чем я.

В основном яВы нарисовали куб и хотите перетащить мышку, чтобы увидеть все стороны. Вращение только по горизонтали или вертикали - это хорошо, но если я попытаюсь объединить их, все пойдет немного странно.

например если я поверну на 180 градусов по вертикали (чтобы получитьСверху вниз'), а затем перетащите мышь горизонтально, после чего куб вращается в направлении, противоположном движению мыши.

Это соответствующий код:

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;
    }
}

Ответы на вопрос(5)

Ваш ответ на вопрос