鼠标旋转

时间:2016-07-23 15:38:59

标签: camera rotation

我想知道你是如何处理鼠标的。

众所周知,如果我想旋转相机,鼠标通常会被锁定。例如射击游戏就是这样做的。

但是,如果它被阻止移动,那么如何检测鼠标是否会移动?

我没有那种逻辑。

我希望有人可以帮助我。非常感谢!

1 个答案:

答案 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(), &current_x, &current_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。