使用在GLUT鼠标滚轮(Using the mouse scrollwheel in GLUT)

2019-07-18 08:02发布

我想使用鼠标滚轮在我的OpenGL GLUT程序和退出场景的放大? 我怎么做?

Answer 1:

Freeglut的glutMouseWheelFunc回调取决于版本,并在十用标准鼠标功能和测试按钮3和4不可靠的。

在glutMouseWheelFunc状态OpenGlut注意事项:

由于缺乏有关鼠标的信息,就不可能对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说,它是“死简单”。 他是不对的。



Answer 2:

需要注意的是古老的内特罗宾的GLUT库不支持滚轮。 但是,后来像GLUT的实现FreeGLUT做。

使用FreeGLUT滚轮是死的简单。 方法如下:

声明一个回调函数,每当滚轮滚动即应被调用。 这是原型:

void mouseWheel(int, int, int, int);

注册与(免费)转运蛋白功能glutMouseWheelFunc回调()。

glutMouseWheelFunc(mouseWheel);

定义回调函数。 第二个参数给出了滚动的方向。 +1值是向前,-1是落后。

void mouseWheel(int button, int dir, int x, int y)
{
    if (dir > 0)
    {
        // Zoom in
    }
    else
    {
        // Zoom out
    }

    return;
}

而已!



Answer 3:

在鼠标点击回调下面的switch语句观察壳体3和4

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();
}


文章来源: Using the mouse scrollwheel in GLUT