Подтвердить что ты не робот

Использование мышиного прокрутки в GLUT

Я хочу использовать колесо прокрутки мыши в моей программе OpenGL GLUT для увеличения и уменьшения сцены? Как это сделать?

4b9b3361

Ответ 1

Обратите внимание, что почтенная библиотека Nate Robin GLUT не поддерживает scrollwheel. Но более поздние реализации GLUT, такие как 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;
}

Что это!

Ответ 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 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);

Как заявлял ОП, он "мертв просто". Он просто ошибся.