2

glutmotionfunc() を使用して、ドラッグ モーションの開始時と終了時の x 位置を取得したいので、x の変化を取得できます。これを行う簡単な方法はありますか?

4

1 に答える 1

9

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

glutMotionFunc両方のコールバックをとで接続することを忘れないでくださいglutMouseFunc

于 2013-02-28T23:42:15.897 に答える