鼠标的DPI值_派派后花园

用户中心 游戏论坛 社区服务
发帖 回复
阅读:1566 回复:0

鼠标的DPI值

刷新数据 楼层直达
jessicaice

ZxID:256606

等级: 禁止发言
举报 只看楼主 使用道具 楼主   发表于: 2009-03-31 0
鼠标的DPI值
1、DPI(CPI)的意义 DPI、CPI这两个词汇现在已经完全混淆了,我就不研究它们的区别了,只研究它们最常用的意义。 DPI(CPI)是一个表示精度的硬件指标。个人的理解,在光电鼠标中,这个量表示的是为了能被人观察到的屏幕上的变化,鼠标必须移动的最小的距离。这里所说的能被人观察到的屏幕上的变化,可以是光标移动1个(或N个)像素,也可以是在FPS游戏里转身10度。这个变化可以由鼠标驱动或软件(游戏)的设定来改变,但其中最基本、最细微的变化只能是光标移动1个像素。我们下面就讨论1个像素变化的情况。而鼠标必须移动的最小的距离,是DPI的倒数。假设某鼠标是200DPI,那么这个鼠标A必须移动1/200英寸,屏幕上光标移动1个像素。而另一各800DPI的鼠标B,只须移动1/800英寸,光标就能移动1个像素。这是第一层意义上的精度差别,就是鼠标对微小移动的响应能力。当鼠标B移动了1/200英寸时,屏幕上光标可以移动4个像素。其表现出的结果就是鼠标B的光标移动速度是比鼠标A快4倍(这时候鼠标本身的移动速度是一样的)。那么在同样的鼠标移动距离下,DPI值低的鼠标A能不能获得较高的光标的移动速度呢(注意,是光标的速度)?当然没问题,驱动里来个加速就行了。一次不是移动1个像素,而是4个像素,那么它就能和鼠标B的光标移动速度一样了。但是新的问题又产生了,鼠标1本身快速移动的也许还看不出,当鼠标慢速移动时,就会发现鼠标在屏幕上的光标总是只能在4的倍数号的像素上停留,鼠标光标在跳动着移动。这是第二层意义上的精度差别,就是鼠标对屏幕像素的操纵能力。所以高DPI鼠标,可以由小幅操作获得高响应,并同时保持高度的像素的操纵能力。

        2、光电鼠标的DPI值决定方法 DPI(CPI)是一个硬件指标,就应该由鼠标的硬件来决定。光电鼠标的DPI值主要取决于光学引擎中的CMOS矩阵和配套的透镜。以上面的200DPI的鼠标A为例,它能对1/200英寸的移动做出反应,也就是说每移动1/200英寸CMOS矩阵上的成像至少产生1个像素的平移。这一个像素也就对应了1/200=0.005英寸。而这个像素本身有多大呢?以一个10*10的矩阵为例,它的一边长度为0.1英寸,那它的一个像素的边长就是0.01英寸。为了能让一个像素对0.005英寸的移动产生反映,就需要用一个2倍的透镜来放大使之一一对应。公式为:像素边长=透镜被率/DPI值。如何提高DPI值呢?有2个办法。 A、提高COMS矩阵的像素密度。设边长0.1英寸不变,提高像素密度为20*20,则一个像素的边长就是0.005英寸,同时透镜一味率2倍不变,这样就可以对0.005/2=1/400英寸的移动产生反应,也就是提高到了400DPI。 B、换用高放大被率的透镜。COMS矩阵不变,像素的边长就是0.01英寸,透镜一味率提高到4倍,也可对0.01/4=1/400英寸的移动产生反应,也提高到了400DPI。方法A、B可以单独或同时使用。能采用方法A的只能是光学引擎的生产商,而换透镜普通鼠标生产商也有可能做到。鼠标中采用的塑料透镜本身精度很低,安装公差也不是很高,随意提高倍被率会造成很大的成像失真,可能得不偿失。 PS:安捷伦的2051之类的400/800DPI可选我猜测可能是下面这种情况:提高COMS矩阵的像素密度,会造成良品率低,所以就把DSP设计成2种精度可选,完全没问题的良品就让一线厂商用800DPI(当然400DPI也可以用,但估计没人会这样设),有瑕疵的就让二线厂商用400DPI(可能有些LJ厂商会用这种芯片造800DPI的鼠标)。这种做法就和INTEL把缓存有瑕疵的P3/P4改菜羊差不多。

        3、DPI、扫描速度、最大移动速度之间的关系光电鼠标的这几个指标之间的关系很让人迷惑,我们就从这几个指标的物理单位开始做些推论。 微软IE3.0的光学引擎的指标比较明确,我们就从它开始。 分辨率:400DPI(400点/英寸)扫描次数:6000次/秒最大移动速度:37英寸/秒(为计算方便取40) CMOS矩阵:22像素*22像素 首先每次扫描允许移动距离 = 最大移动速度/扫描次数 =(40英寸/秒)/(6000次/秒)= 1/150英寸/次 (式1) 这个值也就是说两次扫描之间鼠标移动超过1/150英寸,鼠标无法识别,会丢帧。由上一节的说明可知,微软的光学引擎可以识别1/400英寸的移动,可知每次扫描允许移动点数 = 每次扫描允许移动距离*分辨率 =1/150英寸/次 * 400点/英寸 = 8/3 点/次 约等于3点/次,同样由上一节的说明可知,移动一个点可对应CMOS矩阵平移1个像素,由次每次扫描允许移动像素 = 每次扫描允许移动点数 = 3 像素/次。 就是说,只要2次扫描之间某坐标轴上的平移不超过3个像素,DSP就可以识别两次扫描结果的差别,而这两次的结果有多少是一样的呢?算一下以变化最大的45度斜移3像素为例,XY轴各移动[根号3]个像素,就算是2个吧,还有肯定会在下一帧出现的图样是中间部分有(22-2*2)*(20-2*2)=324个像素是一样,占总像素的66.9%。也就是,就算以40英寸/秒的速度移动,IE3连续两次扫描结果都有2/3上是一样的,DSP完全可以只抽取其中的一部分(比如中间的16*16的矩阵)来比较,降低运算量。 现在换一个鼠标来看看降低扫描次数会发生什么:微软宝蓝鲨,后两项指标不明用IE3的值来代替;分辨率:400DPI(400点/英寸)扫描次数:2000次/秒最大移动速度:37英寸/秒(为计算方便取40,推测) CMOS矩阵:22像素*22像素(推测)每次扫描允许移动像素 = 每次扫描允许移动点数 = 每次扫描允许移动距离*分辨率 = (最大移动速度/扫描次数)*分辨率 = ((40英寸/秒)/(2000次/秒))*400点/英寸 = 8 点/英寸以变化最大的45度斜移8像素为例,XY轴各移动[根号8]个像素,约等于3个吧,还有16*16=256个像素是一样,占总像素的52。9%。宝蓝鲨虽然只有2000次的扫描率,但最高速下还能有一大半图样一定会在下一帧出现,只要改一下DSP算法(和IE3比,每秒运算次数只有1/3,运算能力有很富裕),不丢帧是很容易的。这下知道宝蓝鲨的秘密了吧。 在换一个常见的安捷伦的2051: 分辨率:800DPI(800点/英寸)扫描次数:2300次/秒最大移动速度:37英寸/秒(为计算方便取40,推测) CMOS矩阵:16像素*16像素每次扫描允许移动像素 = ((40英寸/秒)/(2300次/秒))*800点/英寸 = 13.9 点/英寸以变化最大的45度斜移13.9像素为例,XY轴各移动[根号13.9]个像素,约等于4个吧,还有8*8=64个像素是一样,占总像素的25%。只有可怜的1/4,不丢才怪了。 最后再看看罗技MX引擎,这个就比较麻烦了,都是推测数据分辨率:800DPI(800点/英寸)扫描次数:5222次/秒(推测)最大移动速度:40英寸/秒 CMOS矩阵:30像素*30像素(像素总数:900像素)像素处理能力:4.7百万像素/秒 这里使用了韵鹿?剑荷?璐问?nbsp;= 像素处理能力/每次扫描像素总数 = (4700000像素/秒)/(900像素/次)= 5222次/秒这个公式我认为是成立的,因为它的物理单位是相符的。 每次扫描允许移动像素 = ((40英寸/秒)/(5222次/秒))*800点/英寸 = 6.12 点/英寸以变化最大的45度斜移8像素为例,XY轴各移动[根号6.12]个像素,也等于3个吧,还有24*24=576个像素是肯定一样,占总像素的64%。和IE4的是同一水准的。丢不丢就要看DSP算法的水准了(微软本来是做软件的,这方面比较沾光吧)。 结论:其实也没有什么结论,DPI、扫描速度、最大移动速度还有CMOS矩阵尺寸之间是剪不断理还乱,总之需要一个比较平衡的设定。

        4、鼠标USB和PS/2接口速率的问题曾经有人说微软的37英寸/秒的指标是如何实事求是,罗技的40英寸/秒下根本用不了800DPI,超过USB接口的最大信号报告速率之类的云云。还有N多的人YY PS/2接口的200Hz的刷新率。实际情况是都***扯淡。鼠标通过接口传输给计算机的不是CMOS扫描下来的结果,而是由扫描结果经过鼠标内部的DSP处理以后得出的位移值。大家还记得以前有内置字库的打印机吗?简单来说就是可以直接向这种打印机发汉字的区位代码和字体代码已经控制码,而不是汉字的点阵,传输数据量极小。打印机接受了这些代码后就在自己的字库里的相应位置调用汉字的字模并打印。鼠标也是这样,不过传输的是鼠标光标的位置和各按健的状态。一个400DPI的鼠标,2000次刷新,鼠标接口100Hz。鼠标光标初始位置是屏幕正中间,可以定义为坐标零点。移动速度10英寸/秒,0.01秒内鼠标向右移动了0.1英寸,也就是向右移动了40个点,鼠标处理以后只需向计算机发出类似{X:+40,Y:+0,鼠标各按键:未按下}这样的数据列就行了。一次指令的长度最多{X:16bit,Y:16bit,按键:16bit,其它:16bit},总共64bit,算它用usb口125Hz, 数据传输率 = 64bit*125Hz = 8000bps = 8kbps 比N年前的破猫都小很多。 USB口的125Hz够了吗?我说是足够了。我想很多人都忘了鼠标的移动最终要表现在屏幕上的指针的移动,你的显示器的刷新率是多少?显示器很好,100Hz?,OK!鼠标接口速率也是100Hz就正好。反正你的显示器一秒只能显示100帧画面,鼠标就算一秒传2000次信息,也只有其中的100次能在屏幕上显示,其它都丢掉了。有人会问,接口速率这么低,那么高扫描次数有什么用。这里有要用到显示器的刷新率了,还有显卡。接口速率对应显示器的刷新率,扫描次数相当于显卡GPU的处理能力。显卡GPU的处理能力越强,画面就越精美。但不伦多精美的图像,85Hz的显示器一秒就只能显示85帧图像
发帖 回复