我想知道你是如何处理鼠标的。
众所周知,如果我想旋转相机,鼠标通常会被锁定。例如射击游戏就是这样做的。
但是,如果它被阻止移动,那么如何检测鼠标是否会移动?
我没有那种逻辑。
我希望有人可以帮助我。非常感谢!
答案 0 :(得分:1)
在我的场景中,我没有禁用鼠标,我只是禁用了光标。
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。