Entendo perfeitamente que o GLUT é limitado e o seguinte problema provavelmente não pode ser resolvido com o OpenGL / GLUT, mas como não sei exatamente se pode ou não, é melhor perguntar. Talvez esteja fazendo algo errado ou esquecendo algo importante. Ou provavelmente não, e o GLUT não fica melhor que isso.
Meu problema é que não consigo prender o mouse dentro da janela. Bem, na verdade, eu posso, o código abaixo faz exatamente isso. Prendo o mouse dentro da janela e posso usá-lo livremente para girar o mundo. O problema? Se mover o mouse muito rápido, posso sair da prisão da janela.
Existe uma maneira de contornar isso com o OpenGL / GLUT ou a única opção é outra biblioteca ou fazer algumas chamadas diretamente para a API do Windows? Palavras suficientes, aqui está o meu código atual:
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);