Quiero usar la rueda de desplazamiento del mouse en mi programa OpenGL GLUT para acercar y alejar una escena? ¿Cómo puedo hacer eso?Usando la rueda de desplazamiento del mouse en GLUT
Respuesta
Tenga en cuenta que venerable Nate Robin's GLUT biblioteca no es compatible con la rueda de desplazamiento. Pero, las implementaciones posteriores de GLUT como FreeGLUT hacen.
El uso de la rueda de desplazamiento en FreeGLUT es muy simple. Aquí se muestra cómo:
Declara una función de devolución de llamada que se invocará cada vez que se desplace la rueda de desplazamiento. Este es el prototipo:
void mouseWheel(int, int, int, int);
Registre el de respuesta con el (gratuito) Función de GLUT glutMouseWheelFunc().
glutMouseWheelFunc(mouseWheel);
Define 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 todo!
de devolución de llamada de glutMouseWheelFunc freeglut es la versión dependiente y no fiable en X. El uso de funciones estándar del ratón y prueba de los botones 3 y 4.
Las notas OpenGlut en 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, simplemente no de manera confiable.) Se le recomienda utilizar el informe de botón de mouse estándar , en lugar de eventos de rueda.
El uso de informes estándar GLUT ratón:
#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);
A medida que la OP se ha dicho, es "muerto simple". Él solo estaba equivocado.
Desafortunadamente usar botones fijos es bastante poco confiable ya que CUALQUIER botón del mouse corresponde a la rueda del mouse depende de qué dispositivo haya enchufado. De hecho, creo que el más común es el botón 4/5 para arriba/abajo, no 3/4. Para cualquier programa utilizable, desea que sea fácil para el usuario modificar esto. –
En mi Mac con exceso libre, 3/4 corresponden al desplazamiento vertical hacia arriba y hacia abajo y 5/6 corresponden al desplazamiento horizontal (en mi panel táctil). –
Gracias amigo, esta solución funciona perfectamente en mi escenario de prueba. –
- 1. Desplazamiento horizontal con la rueda del mouse en Visual Studio
- 2. Desplazamiento horizontal con la rueda del mouse en un div
- 3. TListView y desplazamiento de la rueda del mouse
- 4. Desplazamiento vertical suave de la página con la rueda del mouse y la barra de desplazamiento
- 5. ¿Cómo detectar la inclinación de la rueda del mouse?
- 6. ¿Cómo establecer la velocidad de desplazamiento de la rueda del mouse en IntelliJ?
- 7. Poner ListBox en ScrollViewer: la rueda del mouse no funciona
- 8. la rueda del mouse no se desplaza en tmux
- 9. ¿Cómo detener el desplazamiento simultáneo del navegador y la rueda del mouse SWF en AS3?
- 10. ¿Cómo puedo acelerar la velocidad de desplazamiento en un JScrollPane cuando uso la rueda del mouse?
- 11. ¿Cómo suprimo el desplazamiento de la rueda del mouse de la ventana ...?
- 12. ¿Cómo puedo desplazar mi panel con la rueda del mouse?
- 13. La rueda de desplazamiento vertical del mouse no funciona en VS 2010 Ultimate
- 14. Deshabilitar la rueda de desplazamiento del mouse en el cuadro combinado VB.NET
- 15. Tecla de control más rueda del mouse
- 16. Cómo capturar la rueda del mouse en el panel?
- 17. Flex Spark List Velocidad de desplazamiento de la rueda del mouse
- 18. Desplazamiento de la rueda del mouse de C# ListView sin foco
- 19. Rueda del mouse Valor delta siempre 120
- 20. Evento de rueda de mouse 'ficticio' desencadenante
- 21. RatónEnlazando la rueda del mouse para ampliar WPF y MVVM
- 22. Desplazamiento horizontal con la rueda de desplazamiento en Eclipse
- 23. Javascript: ¿Capture el evento de la rueda del mouse y no se desplace por la página?
- 24. ¿Cómo puede mi vista responder a una rueda del mouse?
- 25. jQuery - jScrollPane con AJAX: la rueda del mouse no funciona
- 26. ¿Se puede usar la rueda del mouse al arrastrar/soltar?
- 27. ¿Cómo desplazarse horizontalmente en WPF con la rueda de inclinación del mouse?
- 28. Cómo usar mi trackpad para desplazamiento horizontal de la rueda del mouse en un ScrollPane de Java AWT
- 29. Desplazamiento del mouse en el lienzo [fabric.js]
- 30. Rollo de rueda del mouse en el panel con controles picturebox agregados dinámicamente
Para mi molestia, freeGLUT no parece implementar la devolución de llamada glutMouseWheelFunc(). Es bastante irónico que los carteles se quejaran de este estilo de publicación, pero la respuesta que publicaste para ti era incorrecta. – Rich
Agregando a eso, incluso cuando se usa '#include' para que el código se compile, glutMouseWheelFunc no parece ser llamado (como se probó en Ubuntu 10.04 x86_64, que envía freeglut 2.6.0). La solución es usar la devolución de llamada regular 'glutMouseFunc' y comprobar si' button == 3' para la rueda hacia arriba, y 'button == 4' para la rueda hacia abajo. –
glutMouseWheelFunc callback es específico de Windows podría no en Linux y sistemas MAC – AMCoded