Ste*_*len 6 floating-point mouse
在我看来,在某些情况下,从鼠标中读取更高精度的值,而不仅仅是当前屏幕分辨率上的一系列离散像素坐标,这可能很有用.显然,在GUI中没有必要这样做,但对于某些游戏,将它与屏幕分辨率完全联系起来甚至没有任何意义.
为什么我们不得不将其作为像素坐标而不仅仅是原始模拟值读取?
至少在 Windows 下,对于支持高分辨率报告的设备,您可以检索从 0 到 0xffff 的更高分辨率坐标,而不是将鼠标位置转换为屏幕坐标
检索高分辨率点。x 和 y 坐标的点范围都可以是从 0 到 65,535 (0xFFFF)。这是绝对坐标定位设备(例如绘图板)提供的分辨率。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646259(v=vs.85).aspx
根据此处的一个答案,可以使用非标准缩放在 Mac 上实现子像素分辨率:
OSX 上的高分辨率和高帧率鼠标坐标?(或者其他解决方案?)
该问题的答案均未被接受,但可能值得进一步调查。
Windows 使用WM_INPUT和WM_MOUSEMOVE,以及 DirectInput 和 XInput;
默认情况下,它仅支持WM_MOUSEMOVE主 Windows GUI,它完全基于整数,但如果您要同时实现WM_INPUT和WM_MOUSEMOVE,您可以以子像素精度移动鼠标光标。
有些程序显然会充分利用这一点,例如第一人称射击游戏、Web 浏览器(缩放页面和滚动条)和图像编辑程序(例如 GIMP、Adobe Photoshop/Illustrator、Paint.NET 等) )
另外,让鼠标同时发送WM_INPUT和WM_MOUSEMOVE,并且 Windows shell 本身支持它,通常会使鼠标移动看起来更流畅;为了充分利用这一点,您可能需要修改鼠标光标在 Windows 中的工作方式,以便可以实现 ClearType 字体渲染的变体,使用有符号距离场和/或可缩放矢量图形来确定光标的边缘(这也可能允许其他视觉效果,例如适当的运动模糊、照明等。
编辑:我刚刚发现,差不多两年后,有人在我生日那天更新了我帖子的格式。太棒了,谢谢老兄。