如何延长鼠标在 OpenGL 窗口中的移动距离?
我希望实现的是一个类似 fps 的界面,其中光标被隐藏并且相机旋转不受鼠标必须保持在窗口边界内的限制。
每次鼠标移动后,使用 glutWarpPointer 将鼠标移回屏幕中间(在 glutMotionFunc、glutPassiveMotionFunc 中)。使用 glutsetcursor 更改或隐藏光标的外观。
在 Linux 中,这通常通过将鼠标“扭曲”回到屏幕中心来实现。这是一个关于此的论坛主题,使用流行的 SDL 库进行实际的鼠标阅读。
在 Windows 中,考虑使用较低级别的输入 API:s,例如 XInput。
执行此操作的一些代码可能需要特定于平台。例如,在 Windows 上,您通常会在用户拖动鼠标时进行相机旋转。您可以通过捕获鼠标并在捕获鼠标时响应WM_MOUSEMOVE
消息来处理它。捕获鼠标时,即使光标位置超出窗口边界,您仍将继续收到鼠标移动消息。
看来 unwind 已经很好地覆盖了 X 了,这里不再赘述。
根据您使用的平台和工具,您可以让鼠标移动,然后计算距离,然后将其移回屏幕中心(或 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);
这样,您可以轻松获得鼠标移动,同时将鼠标保持在同一位置,从而避免问题。请注意,GetMousePosition
andMoveMouse
是通用函数名称,因为这取决于您使用的操作系统和/或库。