在运动开始时获取x位置并使用glutmotionfunc结束

时间:2013-02-28 23:12:51

标签: c++ opengl glut

我想使用glutmotionfunc()来获取拖动动作开始时的x位置和结束,即我可以得到x的变化。有一种简单的方法吗?

1 个答案:

答案 0 :(得分:7)

我认为glutmotionfunc()无法按预期的方式运作。

当拖动完成后,注册的回调仅调用一次。

,按下按钮时,鼠标移动的每个时间都会调用

这里的想法是能够为每一个小拖动动作不断更新场景。

要获得通话之间的移动,您必须存储之前获得的值。 哦,不要忘记将存储的值标记为无效,如果同时按钮被释放。否则你会得到一些有趣的结果。

所以这里的一般想法

int old_x=0;
int old_y=0;
int valid=0;

void mouse_func (int button, int state, int x, int y) {
  old_x=x; 
  old_y=y;
  valid = state == GLUT_DOWN;
}

void motion_func (int x, int y) {
  if (valid) {
    int dx = old_x - x;
    int dy = old_y - y;
    /* do something with dx and dy */
  }
  old_x = x;
  old_y = y;
}

不要忘记将这两个回调与glutMotionFuncglutMouseFunc

连接起来