|
本帖最后由 xmiangui 于 2010-9-15 01:30 编辑
我在上面那2篇文章(尤其请以微软的那篇技术文档为准)的基础上写的。
先来解释LZ给出的“0.03125、0.0625、0.25、0.5、0.75、1、1.5、2、2.5、3、3.5”这串数字到底是什么东西。
鼠标在屏幕上的位移(Vpoint)与鼠标回报的物理位移(Vmouse)的公式是:
Vpointer=interger(F1(Vmouse)×(Vmouse+Rn-1)×M)
当然这个公式太复杂,首先简化一下:
- interger()取整,因为屏幕上的位移,最小是1个像素。我们这里先不用关心这个。
换行ing - Rn-1,上一个鼠标位移中取整下来的小数,代入本次计算中。因为我们不关心取整的问题,所以这个也不关心。
换行ing - F1(Vmouse)这个就是勾选“提高指针精确度”这个选项以后的“加速度”。实际上并不是真正意义上的加速度,其实是一个关于速度的分段函数。当然大家理解成加速度也没错,这里不讨论此问题,有兴趣的请参阅我上面的链接。
一般来说我们用游戏鼠标的时候这个选项是关闭的,这个直接舍去。
简化后的公式就是:
Vpointer = Vmouse X M
超简单吧:指针速度 = 鼠标回报的物理位移速度 X M
再看这串数字:“0.03125、0.0625、0.25、0.5、0.75、1、1.5、2、2.5、3、3.5”
这串数字实际上就是公式中的M值。因为鼠标屏幕位移和回报的物理位移是线性关系,斜率(乘数)为M,所以这串数字也可以当作计算DPI的参数。
这里举个例子,同一只鼠标的情况:
- 比如我有一支狂蛇,我设置为450DPI。假设鼠标回报的物理位移Vmouse也是450(假设,不一定是这个值)。那么当Windows鼠标速度设置为6/11(M值为1),那么屏幕上就移动了450个像素。
换行ing - 然后我把狂蛇设置为1800DPI,同样假设这种情况下Vmouse为1800。那么当Windows鼠标速度设置为3/11(M值为0.25),那么屏幕上也是移动450个像素,此时相当于狂蛇仍然是450的DPI。这种情况就是所谓的Windows鼠标速度3/11相当于DPI处以4了。
理想情况下的结论:M值可以直接用来换算DPI。如果此时将狂蛇的DPI设置为450,那么11/11的速度下,相当于把狂蛇插值到450 X 3.5 = 1575DPI
但是这一切有一个前提,也就是鼠标回报的物理位移Vmouse,必须和DPI也是线性关系。
什么意思?要满足直接用M值带入DPI计算的话,上列中的1800DPI狂蛇回报的Vmouse,必须是450DPI狂蛇回报的Vmouse的4倍。同一只狂蛇鼠标当然没问题。但是LZ的情况是2只不同鼠标之间的DPI换算,情况就复杂了。
其实到这里已经可以初步下结论:由于不同鼠标即使同DPI,回报的Vmouse是不同的。所以更不要说拿一只1000DPI的鼠标,将Windows鼠标速度设为11/11,和拿一只3500DPI狂蛇,将Windows鼠标速度设为6/11,两者的指针速度会是一样的。
用Windows鼠标速度(M值)来换算DPI,仅限于相同的鼠标。 |
|