【发布时间】:2019-10-07 04:56:29
【问题描述】:
glfwSetCursorPosCallback() 只在鼠标在窗口内时运行,在窗口外时不运行。
今天早些时候,我让这个功能正常工作,但在过去的几个小时里,我一直难以发现问题。
static void cursorPositionCallback(GLFWwindow* window, double xpos, double ypos)
{
std::cout << xpos << " : " << ypos << std::endl;
}
.......
while (!glfw.WindowShouldClose())
{
shader.ClearBuffers(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glfw.ResizeWindow(MVP);
glfwSetCursorPosCallback(glfw.GetWindowID(), cursorPositionCallback);
Cube_IBO.DrawElementsInstanced(CubeIndices.size(), 2);
glfw.SwapBuffers();
}
GLFW 文档状态
"该函数设置指定的光标位置回调 窗口,当光标移动时调用”。
- Windows 10
- Visual Studio 16.0.4
- GLFW 3.3 版
【问题讨论】:
-
我似乎不明白你的问题是什么?正如您所说,GLFW 明确指出,它仅检测作为参数传递给回调 (docs) 的窗口内的移动。那么,这里的问题是什么?
-
您可能还想尝试将
glfwSetCursorPosCallback(...)移到while循环之前。 -
根据此线程:stackoverflow.com/questions/45265543/… 在 Mac 上检测到鼠标移动到窗口外,但在 Windows 上检测不到。这个功能在 GLFW 窗口之外对我 (Windows) 不起作用,但在此视频中起作用:youtu.be/EE5cS8EMT78?t=38 (Mac) 似乎证实了这一点,但我仍然不是 100% 确定。
标签: c++ visual-studio opengl glfw