Использование колеса прокрутки мыши в GLUT
Я хочу использовать колесо прокрутки мыши в моей программе OpenGL GLUT для увеличения и уменьшения масштаба сцены? Как мне это сделать?
2 ответов
обратный вызов Freeglut glutMouseWheelFunc зависит от версии и не является надежным в X. используйте стандартную функцию мыши и проверьте кнопки 3 и 4.
openglut отмечает состояние glutMouseWheelFunc:
из-за отсутствия информации о мыши невозможно реализуйте это правильно на X в это время. Использование этой функции ограничивает переносимость приложения. (Эта функция работает на X, просто не надежно.) Рекомендуется использовать стандарт, надежная отчетность кнопки мыши, а не события колеса.
используя стандартную отчетность мыши GLUT:
#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);
как указано в OP, это"мертво просто". Он просто ошибался.
обратите внимание, что достопочтенный избыток Нейта Робина библиотека не поддерживает колесо прокрутки. Но, более поздние реализации GLUT like библиотеку freeglut сделать.
использование колеса прокрутки в FreeGLUT мертво просто. Вот как:
объявите функцию обратного вызова, которая должна вызываться всякий раз, когда прокручивается колесо прокрутки. Это прототип:
void mouseWheel(int, int, int, int);
зарегистрируйте обратный вызов с помощью функции (Free)GLUT glutMouseWheelFunc ().
glutMouseWheelFunc(mouseWheel);
определить функцию обратного вызова. Второй параметр указывает направление прокрутки. Значения +1-вперед, -1-назад.
void mouseWheel(int button, int dir, int x, int y)
{
if (dir > 0)
{
// Zoom in
}
else
{
// Zoom out
}
return;
}
вот именно!