Ich verstehe vollkommen, dass GLUT begrenzt ist und das folgende Problem wahrscheinlich nicht mit OpenGL / GLUT gelöst werden kann, aber da ich nicht genau weiß, ob es kann oder nicht, frage ich besser einfach. Vielleicht mache ich etwas falsch oder vergesse etwas Wichtiges. Oder wahrscheinlich auch nicht und GLUT wird nicht besser.
Mein Problem ist, dass ich die Maus nicht im Fenster einfangen kann. Nun, eigentlich kann ich, der folgende Code macht genau das. Ich fange die Maus im Fenster ein und kann die Welt mit der Maus frei drehen. Das Problem? Wenn ich die Maus zu schnell bewege, komme ich aus dem Fenstergefängnis.
Gibt es einen Weg, dies mit OpenGL / GLUT zu umgehen, oder ist die einzige Option eine andere Bibliothek oder ein direkter Aufruf der Windows-API? Genug Worte, hier ist mein aktueller Code:
void processPassiveMouseMotion(int x, int y) {
static int centerX = glutGet(GLUT_WINDOW_WIDTH) / 2;
static int centerY = glutGet(GLUT_WINDOW_HEIGHT) / 2;
CameraAngle.x = -1.0f * (y - centerY);
CameraAngle.y = -1.0f * (x - centerX);
if(CameraAngle.x != 0.0f || CameraAngle.y != 0.0f) {
SceneCamera.Rotate(CameraAngle);
glutPostRedisplay();
glutWarpPointer(centerX, centerY);
}
}
glutPassiveMotionFunc(processPassiveMouseMotion);