0
我想知道你是如何處理鼠標控制的。鼠標旋轉
從衆多遊戲中可以看出,如果我想旋轉我的相機,鼠標通常會被鎖定。例如射擊遊戲就是這樣做的。
但是如何檢測到鼠標是否移動,如果它被阻擋移動?
我不明白這個邏輯。
我希望有人能幫助我。非常感謝!
我想知道你是如何處理鼠標控制的。鼠標旋轉
從衆多遊戲中可以看出,如果我想旋轉我的相機,鼠標通常會被鎖定。例如射擊遊戲就是這樣做的。
但是如何檢測到鼠標是否移動,如果它被阻擋移動?
我不明白這個邏輯。
我希望有人能幫助我。非常感謝!
在我的場景中,我不禁用鼠標,我只是禁用了光標。
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) - 每個框架的中心,我們測量鼠標的移動距離,然後移動相機的數量。然後,當一個新的幀到來時,它會再次重置,但是在這一點上,我們不移動相機,只移動光標位置。或者說,這就是我們正在做的事情。
對不起,我想我沒有解釋,最後一點很好,希望我的代碼更有用。它是C++與一些OpenGL相關的庫,如glew32。
現在它的工作原理:D我剛剛編輯了一些行。現在我將鼠標光標每幀重置到中心。它工作得好多了,我之前就有過。哇。非常感謝。這種方式已經實現了偏航和俯仰。祝你有美好的一天:D – DotBlack