Entiendo perfectamente que GLUT es limitado y el siguiente problema probablemente no se pueda resolver con OpenGL / GLUT, pero como no sé exactamente si puede o no, es mejor que pregunte. Tal vez estoy haciendo algo mal u olvidando algo importante. O probablemente no, y GLUT no se pone mejor que esto.
Mi problema es que no puedo atrapar el mouse dentro de la ventana. Bueno, en realidad puedo, el código a continuación hace exactamente eso. Atrapo el mouse dentro de la ventana y puedo usar el mouse libremente para girar el mundo. ¿El problema? Si muevo el mouse demasiado rápido puedo salir de la prisión de la ventana.
¿Hay alguna forma de evitar esto con OpenGL / GLUT o la única opción es otra biblioteca o hacer algunas llamadas directamente a la API de Windows? Palabras suficientes, aquí está mi código actual:
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);