如果在加载场景时移动鼠标光标不会消失 - OpenGL 和 GLFW
Posted
技术标签:
【中文标题】如果在加载场景时移动鼠标光标不会消失 - OpenGL 和 GLFW【英文标题】:Mouse cursor does not disappear if moving while loading scene - OpenGL and GLFW 【发布时间】:2018-04-10 12:44:02 【问题描述】:我正在使用 OpenGL 4.1、Xcode 和 GLFW 设计一个玩具游戏引擎。我注意到,如果我在加载场景时移动鼠标,鼠标光标不会消失,尽管调用
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
游戏运行良好,但光标仍然可见。
我尝试在场景加载后、进入游戏循环之前调用 glfwSetInputMode(),但没有帮助。此外,启用光标并再次禁用它不会影响它在屏幕上的存在。我该如何解决这个问题?谢谢。
【问题讨论】:
【参考方案1】:光标不是 OpenGL 功能,这是底层 OS 图形系统功能。 GLFW 库为您提供了跨平台的系统 API 包装器。
根据 GLWF API:
GLFW_CURSOR_HIDDEN 使光标在窗口的客户区上方时不可见,但不限制光标离开。
什么时候
GLFW_CURSOR_DISABLED 隐藏并抓取光标,提供虚拟且无限制的光标移动。这对于实现例如 3D 相机控件很有用。
所以GLFW_CURSOR_DISABLED
在全屏模式下很有用,而GLFW_CURSOR_HIDDEN
在窗口模式下很有用。
【讨论】:
也许我不清楚。游戏完美运行。但是,当且仅当我在加载时移动鼠标,光标不会消失。当然,我尝试了您的建议并在回答之前仔细检查了 GLFW 官方指南。 我想在你加载场景的时候,OpenGL上下文还没有初始化,请检查一下。 你好维克多。它被初始化。 if(!glfwInit()) 是我代码中的第一条指令。不,我不需要 GLFW_CURSOR_HIDDEN 选项,而是 GLFW_CURSOR_DISABLED 选项,只要我在应用程序运行时不移动鼠标,它就可以完美运行。如果我使用 GLFW_CURSOR_HIDDEN,我需要将鼠标悬停在窗口上才能捕获它,而我想要的是在我运行应用程序时鼠标位于光标所在的任何位置,这就是 GLFW_CURSOR_DISABLED 发生的情况。所以,我认为,你的结论是不正确的。 window = glfwCreateWindow(800, 600, "mywindow", NULL, NULL); glfwSetInputMode(窗口,GLFW_CURSOR,GLFW_CURSOR_DISABLED); /*加载场景*/ glfwShowWindow(window); ??? 是的,一切都在那里,早在捕获鼠标之前。实际上,我没有 glfwShowWindow()...【参考方案2】:我也遇到了同样的问题,但我设法找到了适合我的解决方案。经过一番摸索,我发现只要确保在禁用光标之前至少调用一次glfwPollEvents()
就可以了。希望这对某人有所帮助。
【讨论】:
以上是关于如果在加载场景时移动鼠标光标不会消失 - OpenGL 和 GLFW的主要内容,如果未能解决你的问题,请参考以下文章