如何在OpenGL窗口模式下扩展鼠标空间

时间:2010-05-18 14:35:02

标签: c++ opengl mouse camera glut

如何延长鼠标在OpenGL窗口中移动的距离?

我希望实现的是fps界面,其中光标被隐藏,并且摄像机旋转不受鼠标必须保持在窗口边界内的限制。

4 个答案:

答案 0 :(得分:3)

使用glutWarpPointer在每次移动鼠标后将鼠标移回屏幕中间(即在glutMotionFunc,glutPassiveMotionFunc中)。 使用glutsetcursor来改变或隐藏光标的样子。

答案 1 :(得分:1)

这通常是通过在Linux中将鼠标“扭曲”回屏幕中心来实现的。 Here是一个论坛帖子,使用流行的SDL库来进行实际的鼠标阅读。

在Windows中,请考虑使用较低级别的输入API:s,例如XInput。

答案 2 :(得分:1)

执行此操作的一些代码可能需要特定于平台。例如,在Windows上,当用户拖动鼠标时,通常会进行相机旋转。您可以通过捕获鼠标并在捕获时回复WM_MOUSEMOVE消息来处理它。捕获鼠标时,即使光标位置超出窗口边界,您仍将继续接收鼠标移动消息。

看起来unwind已经很好地覆盖了X,所以我不会在这里重复它。

答案 3 :(得分:1)

根据您使用的平台和工具,您只需让鼠标移动,然后计算距离,然后将其移回屏幕中心(或OpenGl窗口)。

int x,y;
GetMousePosition(&x,&y);
int deltaX = x-SCREEN_WIDTH/2;
int deltaY = y-SCREEN_WIDTH/2;
MoveMouse(SCREEN_WIDTH/2,SCREEN_HEIGHT/2);

通过这种方式,您可以轻松地将鼠标移动到同一位置,从而避免出现问题。请注意,GetMousePositionMoveMouse是通用函数名称,因为这取决于您使用的操作系统和/或库。