Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6085
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Использование колеса прокрутки мыши в GLUT
Я хочу использовать колесо прокрутки мыши в моей программе OpenGL GLUT для увеличения и уменьшения масштаба сцены? Как мне это сделать?
Функция glutMouseWheelFunc обратного вызова Freeglut зависит от версии и не является надежной в 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, это "dead simple". Он просто ошибался.
Обратите внимание, что библиотека GLUT достопочтенного Нейта Робина не поддерживает колесо прокрутки. Но более поздние реализации GLUT, как и FreeGLUT , делают это.
Использование колеса прокрутки в FreeGLUT-это очень просто. Вот как это делается:
Объявите функцию обратного вызова, которая будет вызываться всякий раз, когда прокручивается колесо прокрутки. Это и есть прототип:
void mouseWheel(int, int, int, int);
Зарегистрируйте обратный вызов с помощью функции glutMouseWheelFunc() (Free) GLUT .
glutMouseWheelFunc(mouseWheel);
Определите функцию обратного вызова. Второй параметр задает направление прокрутки. Значения +1-это вперед, а -1-назад.
void mouseWheel(int button, int dir, int x, int y)
{
if (dir > 0)
{
// Zoom in
}
else
{
// Zoom out
}
return;
}
Вот и все!
обратите внимание на случаи 3 и 4 в инструкции switch ниже в mouseClick callback
glutMouseFunc(mouseClick);
...
void mouseClick(int btn, int state, int x, int y) {
if (state == GLUT_DOWN) {
switch(btn) {
case GLUT_LEFT_BUTTON:
std::cout << "left click at: (" << x << ", " << y << ")\n";
break;
case GLUT_RIGHT_BUTTON:
std::cout << "right click at: (" << x << ", " << y << ")\n";
break;
case GLUT_MIDDLE_BUTTON:
std::cout << "middle click at: (" << x << ", " << y << ")\n";
break;
case 3: //mouse wheel scrolls
std::cout << "mouse wheel scroll up\n";
break;
case 4:
std::cout << "mouse wheel scroll down\n";
break;
default:
break;
}
}
glutPostRedisplay();
}