2016-07-23 151 views
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。

+0

现在它的工作原理:D我刚刚编辑了一些行。现在我将鼠标光标每帧重置到中心。它工作得好多了,我之前就有过。哇。非常感谢。这种方式已经实现了偏航和俯仰。祝你有美好的一天:D – DotBlack