Использование колеса прокрутки мыши в 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;
}

вот именно!