关于Game Mode视角移动缓慢
Describe the bug | Bug描述 最新版本 (57d447e 在linux的X11下,Game Mode的视角移动非常缓慢,鼠标需要移动较大的距离游戏人物才能转动较小的视角。 我在win10下使用msvc编译相同的代码,视角转动的速度变得正常了。 我尝试过修改linux系统的鼠标移动速度,只能略微变快一些。 很抱歉我并不了解引擎的代码,不知道是否是由glfw或其他东西在不同系统下的不同表现导致的。 (也许代码一切正常?只是linux X11对鼠标的移动很奇怪?)
Desktop | 桌面环境
- OS: Linux [Archlinux]
- wm: X11
- Version Kernel: 5.18.3-arch1-1
- CPU Intel i7-8750H
- GPU NVIDIA GeForce RTX 2070 Mobile
- Memory 16GB
- Compiler clang version 13.0.1
Screenshots/Logs | 截图/日志
在Game Mode下的视角移动缓慢
你好,因为我们不太好配置你的开发环境,我可以提供一下排查的思路:
engine\source\runtime\function\input\input_system.cpp 中的 InputSystem::calculateCursorDeltaAngles() 函数主要计算了移动鼠标产生的视角旋转角度,可以在这里给变量加日志观察两个平台下的差异来源。
影响旋转角度 m_cursor_delta_yaw 和 m_cursor_delta_pitch 最直接的相关变量是鼠标指针移动像素值 cursor_delta_x 和 cursor_delta_y、窗口大小 window_size 以及相机视场角 fov。两个平台上应该某个值获取存在明显差异导致最终手感有明显差异。
日志输出使用类似 LOG_WARNING("{}", cursor_delta_x); 即可。或者参考代码中其他使用LOG宏的地方的写法。
对于这种每帧操作相关的bug,用断点调试不是非常方便,你可以先用日志排查一下。
你好,因为我们不太好配置你的开发环境,我可以提供一下排查的思路:
engine\source\runtime\function\input\input_system.cpp中的InputSystem::calculateCursorDeltaAngles()函数主要计算了移动鼠标产生的视角旋转角度,可以在这里给变量加日志观察两个平台下的差异来源。 影响旋转角度m_cursor_delta_yaw和m_cursor_delta_pitch最直接的相关变量是鼠标指针移动像素值cursor_delta_x和cursor_delta_y、窗口大小window_size以及相机视场角fov。两个平台上应该某个值获取存在明显差异导致最终手感有明显差异。 日志输出使用类似LOG_WARNING("{}", cursor_delta_x);即可。或者参考代码中其他使用LOG宏的地方的写法。 对于这种每帧操作相关的bug,用断点调试不是非常方便,你可以先用日志排查一下。
你好,我是楼上提出这个issues的菜狗。。。 很抱歉我今天才发现你的回复,首先很感谢你的帮助,我尝试对你提到的几个变量打LOG
- 鼠标指针移动像素值
cursor_delta_x和cursor_delta_y - 窗口大小
window_size - 相机视场角
fov
发现在Linux X11下的 鼠标指针移动像素值 cursor_delta_x 和 cursor_delta_y 明显远小于Windows系统下的值。
我注意到 registerOnCursorPosFunc(std::bind(&InputSystem::onCursorPos,...) 这个函数绑定了 InputSystem::onCursorPos(double current_cursor_x, double current_cursor_y) 又被 glfwSetCursorPosCallback(m_window, cursorPosCallback); 在这设置了glfw回调
于是我又打了几个LOG, 发现glfw回调得到的pos与下图这里开始计算的current_cursor是一样的,正确
在计算差值的m_cursor_delta_x/y也是正确的
然后我在计算变化角度的这个函数里打了LOG, 如下图

发现采样计算角度这个函数的频率低于计算出差值函数,并且只取了最后一次采样的差值作为角度的计算
我觉得实际上,被输入进计算角度的差值应该是过去一段时间的总和,应该是好几次的累加
在Windows系统下的Log如下, 采样计算角度这个函数的频率会高的多
我猜测这可能是导致我在Game Mode下视角移动缓慢的原因,不过遗憾的是我不知道为什么在我的桌面环境下会发生。。。并且我也不知道该怎么解决这个问题。。。
(又到了吐槽Xorg的时候。。。不知道Wayland有没有这个问题
我通过暴力将旋转角度*5获得了很不错的体验。。。感谢你们的努力!
感谢提供了详细的测试日志,看起来在X11下大部分的鼠标位移事件都没有在输入系统的tick中得到处理,所以导致了镜头移动缓慢的结果。我们可以在回调先积累鼠标位移,然后在tick中处理后清零。我们会尝试修复,到时还烦请协助我们在你的环境测试一下。