Ich weiß nicht genau, wie ich das erklären soll, aber ich hoffe, Sie verstehen, was ich meine.
Im Grunde habe ich einen Würfel gezeichnet und möchte die Maus herumziehen, um alle Seiten zu sehen. Drehen nur horizontal oder vertikal ist in Ordnung, aber wenn ich versuche, diese dann kombinieren Dinge gehen ein wenig seltsam.
Wenn ich z. B. den Würfel vertikal um 180 Grad drehe (um ihn auf den Kopf zu stellen) und dann die Maus horizontal ziehe, dreht sich der Würfel in die entgegengesetzte Richtung zur Mausbewegung.
Dies ist der entsprechende Code:
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;
}
}