1. ホーム
  2. c++

[解決済み] glutmotionfuncを使用してモーションの開始時と終了時のx位置を取得する。

2022-02-27 10:24:22

質問

glutmotionfunc()を使って、ドラッグ動作の開始時と終了時のx位置を取得したいのですが、xの変化を取得するための簡単な方法はありますか?

どのように解決するのですか?

私が思うに 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