私はあなたがマウスのcontollをどう扱うのか知っています。回転のためのマウス
多くのゲームで知られているように、カメラを回転させたい場合、マウスは一般的にロックされています。たとえば、シューティングゲームではそれがあります。
しかし、それを検出する方法は、マウスが動いていた場合、移動がブロックされていたのですか?
私はその論理を得ていません。
誰かが私を助けてくれることを願っています。どうもありがとう!
私はあなたがマウスのcontollをどう扱うのか知っています。回転のためのマウス
多くのゲームで知られているように、カメラを回転させたい場合、マウスは一般的にロックされています。たとえば、シューティングゲームではそれがあります。
しかし、それを検出する方法は、マウスが動いていた場合、移動がブロックされていたのですか?
私はその論理を得ていません。
誰かが私を助けてくれることを願っています。どうもありがとう!
私のシーンでは、私はマウスを無効にしません、私は単にカーソルを無効にします。
glfwSetInputMode(renderer::get_window(), GLFW_CURSOR, GLFW_CURSOR_DISABLED);
これは、シーンを初期化するときに行われます。もちろん
その後、私は、マウスを移動すると、私はそれが(すべてのフレームと呼ばれている)私の更新部でやっているかどうか確認
static double ratio_width = quarter_pi<float>()/static_cast<float>(renderer::get_screen_width());
static double ratio_height = (quarter_pi<float>() * (static_cast<float>(renderer::get_screen_height())/static_cast<float>(renderer::get_screen_width())))/static_cast<float>(renderer::get_screen_height());
double current_x = 0;
double current_y = 0;
glfwGetCursorPos(renderer::get_window(), ¤t_x, ¤t_y);
double delta_x = current_x - prev_x;
double delta_y = current_y - prev_y;
delta_x *= ratio_width;
delta_y *= ratio_height;
cam.rotate(delta_x, -delta_y);
prev_x = current_x;
prev_y = current_y;
あなたは、ピッチ、ヨーのように、物理的な移動のためにそれ以上のものを必要としますしかし、これらは基本です。
位置が(0,0) - 各フレームの中心に設定されているため、マウスの動きを測定し、その量だけカメラを移動します。新しいフレームが来たら、それは再びリセットされますが、この時点ではカメラは移動せず、カーソル位置だけを移動します。それとも、それが私たちが効果的にやっていることです。
申し訳ありませんが、私はその最後のビットについて非常にうまく説明していないと思います。うまくいけば、私のコードがより役に立ちます。 glew32のようないくつかのOpenGL関連ライブラリを持つC++です。
今すぐ動作します:D私はちょうどいくつかの行を編集しました。今度はマウスカーソルを各フレームを中央にリセットします。それはずっとうまく動作しますワオ。どうもありがとうございます。私はすでにヨーとピッチを途中で実装していました。良い一日を – DotBlack