OpenGL ウィンドウでマウスが移動できる距離を伸ばすにはどうすればよいですか?
私が達成したいのは、カーソルが非表示になり、マウスがウィンドウ境界内に留まらなければならないことによってカメラの回転が制限されない、fps のようなインターフェイスです。
マウスを移動するたびに、glutWarpPointer を使用してマウスを画面の中央に戻します (これは glutMotionFunc、glutPassiveMotionFunc にあります)。glutsetcursor を使用して、カーソルの外観を変更または非表示にします。
これは、多くの場合、Linux ではマウスを画面の中央に「ワープ」することで実装されます。これに関するフォーラム スレッドでは、一般的な SDL ライブラリを使用して実際のマウス読み取りを行っています。
Windows では、XInput などの低レベルの入力 API の使用を検討してください。
これを行うコードの一部は、おそらくプラットフォーム固有のものにする必要があります。たとえば Windows では、通常、ユーザーがマウスをドラッグしたときにカメラの回転を行います。WM_MOUSEMOVE
マウスをキャプチャし、キャプチャ中にメッセージに応答することで処理します。マウスがキャプチャされている間、カーソル位置がウィンドウの境界の外に出ても、マウス移動メッセージを受け取り続けます。
unwind はすでに X を十分にカバーしているように見えるので、ここでは繰り返しません。
使用するプラットフォームとツールによっては、マウスを動かして距離を計算し、画面の中央 (または OpenGl ウィンドウ) に戻すことができます。
int x,y;
GetMousePosition(&x,&y);
int deltaX = x-SCREEN_WIDTH/2;
int deltaY = y-SCREEN_WIDTH/2;
MoveMouse(SCREEN_WIDTH/2,SCREEN_HEIGHT/2);
このようにして、マウスを同じ場所に置いたままマウスの動きを簡単に取得できるため、問題を回避できます。GetMousePosition
およびは一般的な関数名であることに注意してくださいMoveMouse
。これは、使用する OS やライブラリによって異なります。