Capisco perfettamente che GLUT è limitato e il seguente problema probabilmente non può essere risolto con OpenGL / GLUT, ma poiché non so esattamente se può o meno, è meglio che lo chieda. Forse sto facendo qualcosa di sbagliato o dimentico qualcosa di importante. O probabilmente no e GLUT non migliora di così.
Il mio problema è che non riesco a intrappolare il mouse all'interno della finestra. Bene, in realtà, posso, il codice qui sotto fa proprio questo. Intrappolo il mouse all'interno della finestra e posso usare il mouse liberamente per ruotare il mondo. Il problema? Se muovo il mouse troppo velocemente, riesco ad allontanarmi dal carcere di finestra.
Esiste un modo per aggirare questo problema con OpenGL / GLUT o l'unica opzione è un'altra libreria o effettuare direttamente alcune chiamate all'API di Windows? Basta parole, ecco il mio codice attuale:
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);