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