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

Posted

技术标签:

【中文标题】如何在 OpenGL 窗口模式下扩展鼠标空间【英文标题】:How do I extend mouse space in OpenGL windowed mode 【发布时间】:2010-05-18 14:35:01 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

每次鼠标移动后,使用 glutWarpPointer 将鼠标移回屏幕中间(即在 glutMotionFunc、glutPassiveMotionFunc 中)。 使用 glutsetcursor 更改或隐藏光标的外观。

【讨论】:

【参考方案2】:

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

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

【讨论】:

干杯伙伴。如此明显的解决方案。再次感谢。【参考方案3】:

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

看来unwind已经很好地覆盖了X,这里不再赘述。

【讨论】:

感谢您提供更多详细信息 :)【参考方案4】:

根据您使用的平台和工具,您可以让鼠标移动,然后计算距离,然后将其移回屏幕中心(或 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 是通用函数名称,因为这取决于您使用的操作系统和/或库。

【讨论】:

以上是关于如何在 OpenGL 窗口模式下扩展鼠标空间的主要内容,如果未能解决你的问题,请参考以下文章

opengl如何实现鼠标场景漫游 视点随着鼠标的移动发生变化 刚刚接触opengl所以不大懂(不用glut的情况下)

鼠标拖动文字或者图片,浏览器自动新建页面打开。如何关闭此功能!

openGL如何在改变窗口大小时,使自己的图形不被拉伸

google浏览器如何设置鼠标拖动显示浏览器新窗口

如何使用 c++ 和 opengl 在 mac 中创建窗口?

如何在VisualStudio2015的环境下,配置OpenGL4.3