我使用 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 将太小,甚至无法容纳所提供的价值,因为它在不断增长。这个问题有解决方案吗,或者这不是我应该担心的事情?
所以我实际上不确定这是否真的正确 (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)
| 归档时间: |
|
| 查看次数: |
1923 次 |
| 最近记录: |