Ich möchte das Mausrad in meinem OpenGL GLUT-Programm verwenden, um eine Szene zu vergrößern oder zu verkleinern? Wie mache ich das?Verwenden des Mausrads in GLUT
Antwort
Beachten Sie, dass die ehrwürdige Bibliothek Nate Robin's GLUT das Scrollrad nicht unterstützt. Aber, spätere Implementierungen von GLUT wie FreeGLUT tun.
Die Verwendung des Scrollrads in Freeglut ist tot einfach. Hier ist wie:
Deklarieren Sie eine Callback-Funktion, die immer aufgerufen werden soll, wenn das Scrollrad gescrollt wird. Dies ist der Prototyp:
void mouseWheel(int, int, int, int);
den Rückruf Registrieren Sie sich bei der (Free) GLUT Funktion glutMouseWheelFunc().
glutMouseWheelFunc(mouseWheel);
Definieren Sie die Rückruffunktion. Der zweite Parameter gibt die Richtung der Bildlaufleiste an. Werte von +1 sind vorwärts, -1 ist rückwärts.
void mouseWheel(int button, int dir, int x, int y)
{
if (dir > 0)
{
// Zoom in
}
else
{
// Zoom out
}
return;
}
Das war's!
freeglut der glutMouseWheelFunc Rückruf ist versionsabhängig und nicht zuverlässig in X. Verwenden Sie Standard-Mausfunktion und Test für die Tasten 3 und 4
Die OpenGlut Hinweise auf glutMouseWheelFunc Zustand:
Wegen des Mangels an Informationen über die Maus ist es unmöglich, dies zu diesem Zeitpunkt korrekt auf X zu implementieren. Die Verwendung dieser Funktion begrenzt die Portabilität Ihrer Anwendung. (Diese Funktion funktioniert auf X, nur nicht zuverlässig.) Sie sind aufgefordert, die Standard, zuverlässige Maus-Bericht, anstatt Wheel-Ereignisse zu verwenden.
Standard GLUT Maus Berichterstattung verwenden:
#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);
Als OP erwähnt, ist es "einfach tot". Er hat sich einfach geirrt.
Leider ist die Verwendung von festen Tasten ziemlich unzuverlässig, da die Maustasten dem Mausrad entsprechen hängt davon ab, welches Gerät Sie eingesteckt haben. Tatsächlich denke ich, am häufigsten ist Taste 4/5 für hoch/runter, nicht 3/4. Für jedes verwendbare Programm möchten Sie es dem Benutzer leicht machen, dies zu ändern. –
Auf meinem Mac mit freiem Überlauf entspricht 3/4 dem vertikalen Scrollen nach oben und unten und 5/6 dem horizontalen Scrollen (auf meinem Trackpad). –
Danke, diese Lösung funktioniert perfekt in meinem Test-Szenario. –
- 1. Verwenden von glutPassiveMotionFunc(); in GLUT
- 2. Wie wird die Scrollgeschwindigkeit des Mausrads in IntelliJ eingestellt?
- 3. Deaktivieren Sie das horizontale Scrollen durch Klicken des Mausrads in das Element mit Überlauf-x: versteckt
- 4. Mit jquery in Glut App
- 5. Übergang nach dem Speichern des Modells der Glut Daten
- 6. Abfrage opengl, glut, glew
- 7. Fehler beim Erstellen neue glut-Anwendung mit glut-cli
- 8. opengl + glut glutPostRedisplay wo?
- 9. GLUT Ersatz für AUX_RGBImageRec?
- 10. GLUT Ausgang Neudefinition Fehler
- 11. Raphael innere Glut?
- 12. GLUT Windows aktualisiert nicht
- 13. Text mit GLUT/OpenGL in Python zeichnen
- 14. Ist GLUT tot?
- 15. GLUT-Popup-Menüs
- 16. dynamische Parameter für Glut Komponente
- 17. Eingebettete Datensätze in Glut-Daten 1.0 Beta
- 18. Dependency Injection ohne Singleton in glut-cli
- 19. Wie Abfrageergebnis in Glut Daten zwischenspeichern
- 20. Ist Cl-Opengl Glut reif?
- 21. mit wxWidgets in einer GLUT/andere Anwendung
- 22. glut-cli Lauftests von in-Repo-Addons
- 23. SDL vs GLUT in opengl 3D-Programmierung
- 24. auswerten zwei Bedingungen in Lenkern mit glut
- 25. Glut Attribute nicht in Sicht, nur ID
- 26. Array-Variable in einem Glut-Controller
- 27. Unterschied zwischen SDL und GLUT
- 28. Initialisierung von OpenGL ohne GLUT
- 29. Wie kann ich die Position des Mauszeigers in OpenGL/Glut ändern?
- 30. Glut und mit Textur Atlas
Sehr zu meinem Ärger, scheint FreeGLUT den glutMouseWheelFunc() Callback nicht zu implementieren. Eher ironisch, dass Plakate sich über diese Art des Postings beschweren, aber die Antwort, die Sie für sich selbst gepostet haben, war falsch. – Rich
Hinzu kommt - selbst wenn man '#include' verwendet, damit der Code kompiliert wird, scheint glutMouseWheelFunc nicht aufgerufen zu werden (wie auf Ubuntu 10.04 x86_64 getestet, welches Freeglut 2.6.0 liefert). Die Lösung besteht darin, den regulären 'glutMouseFunc'-Callback zu verwenden und nach" button == 3 "für Rad-Up und nach" button == 4 "für Rad-Down zu suchen. –
glutMouseWheelFunc Callback ist Windows-spezifische möglicherweise nicht in Linux und MAC-Systeme – AMCoded