为什么无法获得鼠标坐标的浮点值?

12

在某些情况下,从鼠标中读取更高精度的值可能会很有用,而不仅仅是当前屏幕分辨率上的离散像素坐标范围。显然,在GUI界面中没有必要这样做,但对于某些游戏来说,将其与屏幕分辨率关联起来甚至可能毫无意义。

为什么我们被迫将其视为像素坐标而不是原始模拟值?

4个回答

6
Windows使用WM_INPUTWM_MOUSEMOVE,以及DirectInput和XInput;默认情况下,它仅支持在完全基于整数的主Windows GUI中使用WM_MOUSEMOVE,但是如果您同时实现WM_INPUTWM_MOUSEMOVE,则可以使用亚像素精度移动鼠标光标。一些程序显然会从中受益,例如第一人称射击游戏、Web浏览器(缩放页面和滚动条)以及图像编辑程序(例如GIMP、Adobe Photoshop/Illustrator、Paint.NET等)。
此外,让鼠标同时发送WM_INPUTWM_MOUSEMOVE,并使Windows shell本地支持它,会使鼠标移动总体上看起来更加平滑;为了充分利用此功能,您可能需要修改Windows中鼠标指针的工作方式,以便实现ClearType字体渲染的变体,使用Signed Distance Fields和/或Scalable Vector Graphics来确定光标的边缘(这也可能允许其他视觉效果,如适当的运动模糊、照明等)。
编辑:我刚刚发现,在两年后的今天,有人更新了我的帖子格式,这简直是太棒了,谢谢你啊。

6
在Windows下,如果设备支持高分辨率报告,则可以检索从0到0xffff的更高分辨率坐标,而不是将鼠标位置转换为屏幕坐标。
检索高分辨率点。点可以在x和y坐标中范围从零到65,535(0xFFFF)。这是绝对坐标指针设备(如绘图板)提供的分辨率。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646259(v=vs.85).aspx

根据这里的一个答案,可以使用非标准缩放来在Mac上实现亚像素分辨率:

高分辨率和高帧率鼠标坐标在OSX上?(或其他解决方案?)

那个问题的两个答案都没有被接受,但进一步调查可能是值得的。


1
这取决于所使用的语言和环境。
例如,在Pharo或Squeak smalltalk下运行的Morphic GUI使用浮点数作为其坐标。
这在此处的被接受答案中有列出。
Morphic最初是在self中实现的。

另一方面,这并不能提供更高的精度。 - Stephan Eggermont

-5

因为鼠标不提供模拟或浮点值。这已经是一个翻译了。

[编辑] 有人愿意对-1发表评论吗?


2
鼠标提供的数据密度比屏幕高。为了充分利用鼠标的精度,同时在屏幕上呈现它,需要将鼠标的坐标缩小。这要么导致浮点数,要么截断/四舍五入。我和OP都赞成使用浮点数。尽管如此,没有评论就被打到-3似乎相当严厉... - Dan Ross

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接