opengl glut scrollwheel

opengl - Usando la rueda de desplazamiento del mouse en GLUT



scrollwheel (2)

¿Quiero usar la rueda de desplazamiento del mouse en mi programa OpenGL GLUT para acercar y alejar una escena? ¿Cómo puedo hacer eso?


La devolución de llamada glutMouseWheelFunc de Freeglut depende de la versión y no es confiable en X. Use la función de mouse estándar y pruebe los botones 3 y 4.

Las notas de OpenGlut sobre el estado glutMouseWheelFunc:

Debido a la falta de información sobre el mouse, es imposible implementar esto correctamente en X en este momento. El uso de esta función limita la portabilidad de su aplicación. (Esta característica funciona en X, pero no de manera confiable.) Se le recomienda usar el informe de botón de mouse estándar y confiable, en lugar de eventos de rueda.

Uso de informes de mouse GLUT estándar:

#include <GL/glut.h> <snip...> 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); } } <snip...> glutMouseFunc(mouse);

Como dijo el OP, es "absolutamente simple". Él solo estaba equivocado.


Tenga en cuenta que la librería GLUT de Nate Robin no es compatible con la rueda de desplazamiento. Pero, las implementaciones posteriores de GLUT como FreeGLUT hacen.

Usar la rueda de desplazamiento en FreeGLUT es completamente simple. Aquí es cómo:

Declare una función de devolución de llamada que se invocará siempre que se desplace la rueda de desplazamiento. Este es el prototipo:

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

Registre la devolución de llamada con la función GLUT (libre) glutMouseWheelFunc () .

glutMouseWheelFunc(mouseWheel);

Definir la función de devolución de llamada. El segundo parámetro proporciona la dirección del desplazamiento. Los valores de +1 son hacia adelante, -1 están hacia atrás.

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

¡Eso es!