|
|
[讨论]
高精度鼠标的加速问题和使用经验
18
15759
楼主

本帖最后由 超电磁侠 于 2009-9-10 15:10 编辑
1、鼠标加速度的问题
一般来说,游戏中会使用下列函数之一来使用鼠标:
1.WM_MOUSEMOVE
2.WM_INPUT
3.DirectInput(一般不用)
WM_MOUSEMOVE,就是在桌面下使用的函数,但是这个函数与桌面分辨率密切相关,比如说,你轻微地移动了鼠标,但是并不会使鼠标指针移动到系下一个像素(这就是高DPI鼠标,比如说3200dpi的时候,轻微移动,但是指针没反应的原因,与屏幕分辨率有关)。
并且,这个函数中会加入鼠标加速度的信息,也就是说,一旦游戏使用了这个函数,不论在鼠标控制面板中“提高鼠标精度”一项有没有打钩,游戏中都会有鼠标加速度的体现。这就是通常所说的xp加速度Bug。
2、鼠标速度、鼠标刷新率、屏幕分辨率的关系。
鼠标某个轴的速度Vmouse = (usb报告率/鼠标CPI)× 鼠标移动counts (单位inch/s)
比如125hz下,400cpi的鼠标, 在x轴上鼠标恒定每个usb数据包报告了3个counts,根据公式,大概就是1 inch/s 的移动速度。
屏幕指针某个轴的速度Vpointer = (屏幕刷新率/ 屏幕dpi)× 鼠标移动counts
(单位inch/s)
例如,17寸(指对角线)屏幕,1024×768的分辨率,75Hz刷新率,取长来算,dpi = 1024 ¸ 13.6 = 75
那么同样,在x轴上鼠标恒定每个usb数据包报告了3个counts, Vpointer = 75 ¸ 75 × 3 = 3 inch/s 。
也就是说,屏幕上指针移动的速度是实际鼠标报告的速度的3倍。但是xp不单纯使用这些公式来控制指针,而是通过一个函数来控制,这个函数的曲线包含了5个折点(具体图形可以在msdn中找到),使鼠标表现得更“自然”,但是这是相对低精度的是鼠标来说的,对于高精度鼠标来说,尤其是在游戏中,xp的鼠标加速度是一种干扰。
3、如何解决鼠标加速度的问题。
Razer bluepints论坛上的一位高人aion,编写了一个小程序,http://razerblueprints.net/index.php/component/option,com_smf/Itemid,99/action,dlattach/topic,6898.0/attach,678/ 可以在驱动的层面上禁用鼠标加速度,无论你提高鼠标精度是否打了勾,或者使用了注册表校正。使用前最好备份 /system32/win32k.sys
注意:win7和vista有另外的办法,请不要使用这个。
另外,可以通过修改windows xp注册表中鼠标加速的相关阀值(就是上面提到的5个点的位置),使曲线接近线性。http://www.techpowerup.com/downloads/763/mirrors.php 这个链接可以下到注册表文件,或者google搜索CPL fix。
4、鼠标垫的选择
一般激光鼠能在较多的表面上工作,但这并不意味着能很好地工作。激光鼠虽然能识别到细微的移动,但是一旦表面不平整,或者不够一致,那么这些工作表面上的瑕疵就会对移动造成影响,通常就像某些激光鼠在一些质量一般的布垫上“跳帧”的现象。
以采用philips twin-eye laser
3G光学感应器的Razer 巨蝮蛇为例,这种感应器应用多普勒效应来定位,非常灵敏。以致鼠标垫表面稍微不平整或者加工精度不一致,都会造成定位上的影响。有网友发现巨蝮蛇在采用硬质材料的鼠标垫上才能很好地工作,其实根本原因就是这些硬质的鼠标垫平整度比布垫高,一致性也比较好。
所以对于激光鼠来说,采用塑料、金属、玻璃制成的,并且表面加工得细致的鼠标垫才是“好鞍配好马”。
注:参考msdn, pointer ballistics for windows xp
转自http://www.rapoo.com.cn/bbs/ShowForum.asp?ForumID=8
|
|