Ich versuche, Mini-Anwendung zu erstellen, die Kamera um einen Würfel mit Bewegung der Maus dreht. Es funktioniert perfekt beim Drehen um die Y-Achse, aber ich habe ein Problem mit der Drehung um die X-Achse. Wenn ich meine Maus kontinuierlich nach oben bewege, beginnt der Würfel sich in positiver X-Richtung zu drehen. Nach einiger Zeit kehrt es seine Drehrichtung um und beginnt sich in negativer X-Richtung zu drehen, dreht sich dann nach einiger Zeit wieder in positiver X-Richtung. Ich möchte es um das Positive X drehen lassen, solange ich meine Maus nach oben bewege. Was ist das Problem hier?Drehen der Kamera dreht sich nach einiger Zeit um
Der Würfel befindet sich in der Mitte des Koordinatensystems. Projektion Perspektive:
Edit: Hier ist das Video Problem verbunden: https://youtu.be/997ZdUM8fcQ
vec4 eye;
vec4 at;
vec4 up;
GLfloat mouseX = -1;
GLfloat mouseY = -1;
// Bound to glutPassiveMotionFunc
void mouse(int x, int y) {
// This rotation works perfect, cube rotates on same direction continuously as far as I move the mouse left or right
GLfloat acceleration_x = mouseX - x;
eye = RotateY(acceleration_x/10.f) * eye;
mouseX = x;
// This rotation doesn't work properly, after some time, cube's rotation direction inverses
GLfloat acceleration_y = mouseY - y;
eye = RotateX(acceleration_y/10.f) * eye;
mouseY = y;
// This part teleports pointer to opposite side of window after reaching window bounds
if (x >= 1364) {
glutWarpPointer(1, y);
mouseX = 1;
}
else if (x <= 0) {
glutWarpPointer(1363, y);
mouseX = 1363;
}
if (y >= 751) {
glutWarpPointer(x, 3);
mouseY = 3;
}
else if (y <= 2) {
glutWarpPointer(x, 750);
mouseY = 750;
}
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
vec4 up(0.0, 1.0, 0.0, 0.0);
mat4 model_view = LookAt(eye, at, up);
glUniformMatrix4fv(ModelView, 1, GL_TRUE, model_view);
glDrawArrays(GL_TRIANGLES, 0, NumVertices);
glutSwapBuffers();
}
// Bound to glutTimerFunc
void timer(int id)
{
glutPostRedisplay();
glutTimerFunc(1000.f/60.f, timer, 0);
}
int main(int argc, char **argv)
{
......
......
eye = vec4(0, 0, 2, 0);
at = vec4(0, 0, 0, 0);
up = vec4(0.0, 1.0, 0.0, 0.0);
.....
.....
}