如何修复 GLFW 光标位置值在 GLFW_CURSOR_DISABLE 下不断变大?

Wow*_*zer 6 opengl glfw

我使用 opengl 作为我的窗口。我想实现一个相机类,发现常规光标(GLFW_CURSOR_NORMAL)对于相机来说是不够的。因此,我运行命令glfwSetInputMode(window,GLFW_CURSOR,GLFW_CURSOR_DISABLE)让 opengl 为我重新定位鼠标,并通过我使用该方法设置的回调方法返回光标位置glfwSetCursorCallback(window,callbackPos)

如 glfw 网站上所述,回调函数 (callbackPos) 接受一个窗口和两个 x 位置和 y 位置的双精度值。http://www.glfw.org/docs/latest/input_guide.html

但是,每次我将鼠标移向一个方向时,这两个双打都会不断增长。我的问题来自这样一个事实,即通过整个窗口的使用和鼠标在一个方向上的移动,整个 double 将太小,甚至无法容纳所提供的价值,因为它在不断增长。这个问题有解决方案吗,或者这不是我应该担心的事情?

Veg*_*ard 7

所以我实际上不确定这是否真的正确 (TM),但我和你有同样的担忧,发现你的问题没有答案,所以我不妨发布我的解决方案(这对我有用)。

在光标位置回调中,您可以简单地调用glfwSetCursorPos(window, 0, 0)它,它将虚拟光标的位置重置回 (0, 0);您的光标位置回调的下一次调用现在将与此相关!请注意,至少在我的测试中,在回调函数内设置光标位置不会导致再次调用回调(即仅当用户实际用手移动光标时才会调用它)。

换句话说,代码是这样的:

static void cursor_position_callback(GLFWwindow *window, double x, double y)
{
    // (x, y) are relative!
    ...

    glfwSetCursorPos(window, 0, 0);        
}

int main(...)
{
    GLFWwindow *window = ...;
    ...
    glfwSetCursorPosCallback(window, cursor_position_callback);
    ...
    glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
    ...
}
Run Code Online (Sandbox Code Playgroud)