如何延长鼠标在OpenGL窗口中移动的距离?
我希望实现的是fps界面,其中光标被隐藏,并且摄像机旋转不受鼠标必须保持在窗口边界内的限制。
答案 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);
通过这种方式,您可以轻松地将鼠标移动到同一位置,从而避免出现问题。请注意,GetMousePosition
和MoveMouse
是通用函数名称,因为这取决于您使用的操作系统和/或库。