Usando la rotellina del mouse in GLUT

Voglio usare la rotellina del mouse nel mio programma OpenGL GLUT per ingrandire e rimpicciolire una scena? Come lo faccio?

Il callback di glutMouseWheelFunc di Freeglut dipende dalla versione e non è affidabile in X. Usa la funzione standard del mouse e verifica i pulsanti 3 e 4.

Le note OpenGlut sullo stato glutMouseWheelFunc:

A causa della mancanza di informazioni sul mouse, è imansible implementarlo correttamente su X in questo momento. L’uso di questa funzione limita la portabilità della tua applicazione. (Questa funzione funziona su X, semplicemente non in modo affidabile.) Si consiglia di utilizzare la segnalazione del pulsante del mouse standard affidabile, piuttosto che gli eventi wheel.

Utilizzando la segnalazione standard del mouse GLUT:

#include   void mouse(int button, int state, int x, int y) { // Wheel reports as button 3(scroll up) and button 4(scroll down) if ((button == 3) || (button == 4)) // It's a wheel event { // Each wheel event reports like a button click, GLUT_DOWN then GLUT_UP if (state == GLUT_UP) return; // Disregard redundant GLUT_UP events printf("Scroll %s At %d %d\n", (button == 3) ? "Up" : "Down", x, y); }else{ // normal button event printf("Button %s At %d %d\n", (state == GLUT_DOWN) ? "Down" : "Up", x, y); } }  glutMouseFunc(mouse); 

Come ha affermato il PO, è “morto semplice”. Aveva solo torto.

Nota che la venerabile libreria GLUT di Nate Robin non supporta la rotellina. Ma le implementazioni successive di GLUT come FreeGLUT lo fanno.

Usare la rotella di scorrimento in FreeGLUT è semplicissimo. Ecco come:

Dichiarare una funzione di richiamata che deve essere richiamata ogni volta che si scorre la rotella di scorrimento. Questo è il prototipo:

 void mouseWheel(int, int, int, int); 

Registrare la richiamata con la funzione GLUT (gratuita) glutMouseWheelFunc () .

 glutMouseWheelFunc(mouseWheel); 

Definire la funzione di callback. Il secondo parametro indica la direzione dello scroll. I valori di +1 sono avanti, -1 è indietro.

 void mouseWheel(int button, int dir, int x, int y) { if (dir > 0) { // Zoom in } else { // Zoom out } return; } 

Questo è tutto!