glut Mouse Wheel Func不会触发回调

时间:2014-04-09 07:12:24

标签: opengl glut freeglut

我正在尝试使用鼠标滚动按钮实现放大或缩小操作 通过glutMouseWheelFunc中的 opengl 。我已经实现了如下代码:

#include<GL/freeglut.h>

void mouseWheel(int button, int dir, int x, int y)
{

    printf("in mouse wheel \n");

    if (dir > 0)
    {
        // Zoom in
        ztrans = ztrans - 1.0;
        printf("scroll in = %0.3f\n ",ztrans);
    }
    else
    {
        // Zoom out
        ztrans = ztrans + 1.0;
        printf("scroll out = %0.3f\n ",ztrans);
    }

        glutPostRedisplay();

}

    int main(int argc, char **argv)
    {
      // general initializations
      glutInit(&argc, argv);
      glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
      glutInitWindowPosition(100, 100);
      glutInitWindowSize(800, 400);
      glutCreateWindow("Rotation");

      // register callbacks
      glutReshapeFunc(changeSize); 
      glutDisplayFunc(renderScene);
      glutIdleFunc(renderScene);
      glutIgnoreKeyRepeat(1);
      glutMouseFunc(mouseButton); 
      glutMotionFunc(mouseMove); 
      glutMouseWheelFunc(mouseWheel); // Register mouse wheel function

      glEnable(GL_DEPTH_TEST);

      glutMainLoop();
      return 0;

}

执行时,它不会调用已注册的回调函数(mouseWheel)。我的系统安装了freeglut3。

1 个答案:

答案 0 :(得分:1)

尝试使用 static int内部void mouseWheel方法,然后在renderScene中使用它 像这样

static int k;
static int ztrans
void mouseWheel(int button, int dir, int x, int y)
{

   k = dir; // int dir is +1 of -1 based on the direction of the wheel motion

   ztrans = ztrans + k;

}

这对我有用, 试试这个和反馈,GoodLuck。