游戏方向盘原理

原文地址:http://hi.baidu.com/zotkyahbdocpsxe/item/3e541f462d906daa61d7b9e4

  方向盘是一种特别为赛车游戏设计的专用游戏控制器。

  要简要说明方向盘原理,首先需要说明一下一个概念:控制器的“轴”(AXIS):玩家能在一定的范围内圆滑操作控制器达到类比控制需要,而控制器能将玩家的移动量的位置信息量化以后独立输出一组控制数据的就叫一个“轴”(AXIS)。

  一个方向盘大约有1-4个控制轴,通常将他们分别叫X、Y、Z和S轴。细分起来又可将每个轴分为“负半轴”和“正半轴”,用“X/RX”或“-X/+X”这样的表示方法分别表示。

  单轴式方向盘:只有一个控制轴,通常用做方向控制,如“–X”表示“方向左”;“+X”表示“方向右”等,而油门和刹车等其他控制仍然用按键实现,这类方向盘通常属于“入门级”产品。

  2轴式方向盘:通常X轴用作方向控制,另一个轴由油门和刹车合用,即“-Y”用做油门,“+Y”用作刹车;这一类方向盘的油门和刹车也是类比控制了,但因为油门和刹车共用一个轴,所以油门和刹车并不能同时起作用。

  3轴式方向盘:方向、油门、刹车各用一个独立的轴,从而实现了分轴控制,也就是说,刹车和油门能同时起作用了。

  4轴式方向盘:在3轴式方向盘的基础上再增加一个轴,用做离合器控制,这一类方向盘通常都属于“发烧级”的了。

  实际进行游戏的时候,控制器是这样工作的:玩家操作控制器的某个“轴”,控制器内部的处理芯片将玩家操作的该轴的位置信息量化后输出给电脑的DirectInput,DirectInput将收到的轴位置信息线性放大到0-65535的范围,游戏主程序则直接从DirectInput获得玩家的操作信息从而实现游戏的操作。

  以上过程中,玩家对某一个轴的操作可能是无极的,但控制器内部处理芯片将轴位置信息量化后不可能是无极的,每一个轴都会用一定的数值范围来代表相应的轴位置信息,然后处理芯片会将这个范围划分成若干段(通常为等分)来表示实际的轴位置信息,“将某一个轴的位置信息量化的级数”就是说,在控制器的输出端,能将某一个轴分成多少个过渡的中间状况,也就是该控制器的某一给定轴的精度,控制器的各轴的精度是控制器固有的内在品质,也是衡量控制器性能的重要指标之一。

  注意量化范围并不一定就是实际精度,比如微软PrecisionWheel方向盘的X轴(方向轴),量化范围是-512←→+512,但它转动方向轴的时候,数值每次并不是以1为单位跳动,而是每次跳动5或6.所以,实际它在-512←→+512这个量化范围内只有100+100(左右)个过渡状况,也就是说它的方向轴的实际精度是100+100左右。而不是512+512.而它的油门和刹车两个轴的量化范围分别都是0←→63,并且是以1为单位跳动的,所以说它的油门和刹车轴的实际精度分别都是64级。

  在实际的游戏控制中,我们可能需要对控制器有一些特殊设置,比如控制器中心位置的校准、呆区(Deadzone)设置、以及某些情况下需要的控制器非线性设置等等。下面就谈谈这些:

  方向盘设置

  一方向盘的安装

  方向的物理安装以及与电脑的电气连接问题从略,请查阅相关产品说明书。

  这里只说一下有关方向盘的驱动的安装问题。目前大部分方向盘都是使用USB接口与电脑实行连接的。当正确连接了方向盘以后,Windows随即就会找到新设备并自动安装。Windows对目前大多数USB接口的方向盘都能提供基本的支持,也就是说,即使不安装方向盘自带的驱动,大部分方向盘也都是可以实现基本功能的,但一些方向盘的特殊功能如果不安装自带的驱动则可能不能正常工作,如某些震动方向盘的震动功能,力回馈功能,以及其他比如微软方向盘的按键编程功能等。正是因为Windows会自动识别出方向盘并立即自动安装了驱动,如果这时候再安装方向盘自带的驱动,某些情况可能会出现意外,如外面流传的“微软自己出的方向盘不能与自己的操作系统兼容”这样的问题等。如果你也遇到“安装了方向盘自带的驱动以后方向盘不能正常工作”这一类似的问题,那么你可以试试如下办法:

  对于USB接口的方向盘,那么在开机的状况下将方向盘连接到电脑的USB插头“热拔”下来,再重新插上,看看是否解决问题。

  如果无效,那么就先卸载方向自带的驱动;然后打开“设备管理器”,刷新(扫描硬件改动)找到你的方向盘设备,卸载它。(这时候别再刷新,否则Windows又会立即重新找到方向盘并自动安装)。这时候再重新安装方向盘自带的驱动,完成后再打开“设备管理器”,“扫描硬件更新”以便找到你的方向盘,再试试看,可能这时候方向盘就能正常工作了。其实,这个办法的实质是:“先安装方向盘带的驱动,后连接方向盘”,如果你先连接方向盘后装驱动出现问题,不妨试试这个办法。

  未安装方向盘自带的驱动而是让Windows自动识别出的方向盘,通常在“控制面板/游戏控制器”里,可以进行方向盘的校准工作,但安装了驱动以后,Windows里的这个校准功能就“消失了”,而很多方向盘自带的驱动并没有提供手动校准功能,这时候如果你需要对方向盘进行手动校准,可能就需要使用其他的工具了(后文有专述),如果你的控制器能被Windows自动识别并能使用方向盘的基本功能,并且你也不想使用方向盘驱动带来的“额外的功能”(比如微软的按键编程功能),那么我推荐你不必安装方向盘带的驱动而直接使用它。

  二方向盘的校准

  1.校准的原理

  前面说过,“…DirectInput将收到的轴位置信息线性放大到0-65535的范围…”方向盘输出的轴位置信息在送交DirectInput前是必须经过校准程序校准的,没有经过任何校准的控制器是不能工作的,校准程序所做的事情其实是告诉DirectInput,控制器所发送过来的轴位置数据,哪里是最小(Min)、哪里是最大(Max)、哪里是中点(Cen),而DirectInput并不追究Min、Cen、Max为什么会是这些指定的数值,它只管把得到的Min←→Cen之间的数据线性放大到0←→32768.而把Cen←→Max之间的数据线性放大到32768←→65535。任何低于Min的数据都当作Min处理,任何高于Max的数据都当作Max处理。如此,我们就可以通过特意指定不同的Min、Cen、Max的数值来达到合理使用控制器的行程的目的,一个总的原则是:减少控制的有效行程来使控制器显得更加灵敏;而扩充(到)控制器的最大行程以获得最高的控制精度。

  如下图,某方向盘输出端的量化数据范围是-512←→+512,通过校准以指定不同的Min、Cen、Max数值时,方向盘的工作情况,每图中上方箭头表示游戏中的虚拟方向盘,下方箭头表示游戏控制器方向盘的物理行程。

  左上(校准行程=物理行程):Min=-512,Cen=0,Max=512,这时候的方向盘操作与游戏中的虚拟方向盘正好是一一对应的。既使用了控制器方向盘的全部精度,又能达到最大的控制范围。此为使用得最为普遍的一类校准方式。

  右上(校准行程物理行程):此为一种特殊的校准方式。通过人工指定Min、Cen、Max的数值,使它大于控制器所能输出的数值,这时候的控制器方向盘的全部行程只对应游戏中虚拟方向盘的一部分行程,因为控制器无法输出超出它的量化范围的那一部分数据,所以,游戏中的虚拟方向盘就永远也打不到极限位置,此类校准方式的理念是“集中所有能输出的控制精度来控制游戏中虚拟方向盘的一部分行程”,也就是说“牺牲控制范围以获取更大的控制精度”,一般只用于特定场合。

  上述校准都属于行程校准,并且,上面所例均为左右对称式的校准方式,这里都是假设方向盘操作的物理行程与所输出的量化数据之间的对应关系是准确的,也就说,当方向盘自动回中的时候的自然位置,输出的数据正好是它所能输出的最大量化范围的中点,同时方向盘转到左右两个极限位置的时候输出的也正好是最大和最小的数据。而实际上受制造工艺的限制,以及随着使用过程造成的磨损等等多种因素的影响,很多方向盘并不(总)是那么的准确。但是,只要我们明白了校准原理,这些问题都是可以通过校准来改善的。

  例:假设某方向盘的方向轴的理论输出数据范围是-512←0→+512,而实际使用中测试到该方向盘自动回中时的自然位置输出的数据是20,如果这时候仍然指定Min=-512,Cen=0,Max=512的话,那么在游戏中,因为其自然的中心位置输出的数据并不是0,而是20,该方向盘就会总是偏向一边,这时候的解决办法是通过校准指定其Cen=20.就能解决问题了。

  还有一类校准问题是“呆区”(Deadzone)设置,所谓“呆区”,是指控制器模拟真实方向盘的自由间隙,也就是说,在其有效行程的某一部分输出的数据不做处理,比如方向盘的方向轴的呆区,是指其自由回中的位置左右的一小段行程操作会在游戏中没有反应,用以模拟方向盘的自由间隙,呆区的数值一般用百分比表示,比如方向轴的呆区如果设置成10%,则是表示,方向盘在其中间位置的,其总有效行程的10%的行程范围为呆区,方向盘在该区域范围内的任何移动都被当作“方向正中”处理。其内在的含义实际是指定Cen为一定范围内的数据,而不是指定Cen为单一的具体数据。呆区设置为0%即为没有呆区。

  请注意,在WindowsNT/2000/XP操作系统中不支持保存呆区设置,而在Windows98/ME中是可以的。

  以上说的校准和呆区设置,都是指的在进入游戏前,使用Windows的校准程序、方向盘自带的驱动中的校准程序、以及第三方开发的专用的游戏控制器校准程序进行的校准工作,这些工作实际上都是在控制器输出的数据送交到DirectInput之前所做出的处理,而很多游戏在进入游戏以后也提供各种有关的控制器设置和校准功能,因为游戏在启动后可以通过“驻留处理”或者在游戏主程序中对DirectInput数据进行实时处理,这样就当然不受上述的“NT类操作系统不支持呆区设置”的限制了。

  2.校准的操作

  明白了校准的原理以后,下面再来说说校准的实际操作,我这里将校准分为“自动校准”、“半自动校准”、“手动校准”三种情况来叙述。

  首先说说半自动校准:这里以Windows“控制面板/游戏控制器/控制器属性/校准”提供的校准程序为例说明半自动校准的操作(大部分方向盘如果安装了盘带的驱动,则屏蔽掉了控制面板里的这个校准功能而用驱动程序的相关设置界面取而代之了)

  在提示“将手柄转动几圈,然后按控制器上的按钮”的时候,勾寻显示原始数据”可以看到控制器输出的实际数据。这时候,转动方向盘,输出的数据会实时显示出来,注意,在这个过程中,校准程序会将实际输出的所有数据的最小部分设置为Min,而将收到的最大的数据设定为Max,在“下一步”即“将手柄放在中间并按控制器上的按钮的时候”,它将你那时候的控制器位置输出的实际数据设置为Cen。这里实际上就提供了比较完善的手动校准功能了,如果你想做一个如前文所述的“校准行程<物理行程”的校准方式,那么在转动方向盘的时候,你就不要把方向盘转到头,而只转到你想要设置的位置就可以了。比如你的方向盘实际物理行程有左右各90度,而你想只用左右各60度,那么在“将手柄转动几圈,然后按控制器上的按钮”的时候,你只将方向盘转动到左右各60度,然后就按钮确定就可以了。半自动校准程序通常可以进行“校准行程=物理行程”和“校准行程<物理行程”这两类方式的校准。另外说明一下,某些游戏里在进入游戏后提供的控制器校准功能基本也属于这一类。操作类似。

  自动校准:某些方向盘具备自动校准功能(比如“微软方向盘”),它会在每次初始化方向盘的时候[比如系统开机、重启、方向盘接头的“热插拔”(USB接口类的)等]自动将方向盘当前位置设置为控制器的默认位置。对于方向轴,初始化方向盘的时候,你的方向轴实际所在的位置就被设置为方向轴的中心(Cen)。而踏板,则自动将当前踏板位置设置为踏板的行程起点。所以,这一类方向盘在初始化的时候只需让其处于自然位置即可(通常是:方向盘处于方向控制的自然回中位置,而踏板则处于未踏下的位置),“自动校准”功能会自动按这些位置进行校准。(有兴趣的朋友可以测试:初始化的时候故意让它不在自然位置,看看会有什么结果)

  另外有一些并不具备真正的“自动校准”功能的方向盘,只是在初始化方向盘的时候指定Min和Max分别为该控制器理论上(设计上)所能输出的数据的最小和最大的数据,并指定Cen=Min+(Max-Min)/2。也就是说,它实际上并没有进行任何真正的“校准”动作,而是把Min、Cen、Max分别指定成“内定的”数值通知DirectInput。同时并不提供(或不完整提供)用户进行手动校准的界面,这些方向盘在并没有真正的“自动校准”功能的前提下还想“使产品使用起来显得更加简洁容易”,结果是一旦控制器因为某种原因发生校准问题的时候,使得想进行手动校准的用户无从下手。这应归咎于厂家对自己的产品过于自信。如果这时候卸载方向盘带的驱动,转而用Windows的控制面板的校准程序,又会失去方向盘的一些特殊功能。如果游戏里提供控制器的校准倒还好,可以启动到游戏里再进行校准工作,问题是某些游戏也没有提供完整的控制器校准功能(比如F1C就没有控制器的行程校准和中点校准功能),我们只能对部分厂家的这种盲目自信行为表示遗憾!

  手动校准:遗憾归遗憾,游戏我们还是得玩,该校准的控制器我们也还是得想办法校准。如果安装了方向盘自带的驱动以后找不到手动校准的界面了,并且所玩的游戏里也没有提供完善的校准功能,那么我们就得借助其他的专用的校准工具了,这里介绍大家使用一个叫“DXTweak”的工具,这实际上是Logitech公司在其网站上提供的一个控制器校准工具,(可见Logitech作为知名的外设大厂,是有其大厂风范的,后勤工作做的还是比较到位)。

  这是一个小巧易用的工具,只有一个文件:DXTweak2.exe,免安装,直接双击运行即可。见图:

  启动DXTweak后,在左上的“Polleddevice”下应该就能找到你已经安装了的控制器了,如果你安装了多个游戏控制器,可点击“Next”进行选择。

  转动你的方向盘,这时候可看到界面的左边会用数据和滑杆图像同时显示你的控制器各轴的工作状况,其中value数据就是DirectInput的实际数据了,而Raw数据就是控制器实际输出的量化数据,界面的右边提供了手动指定Min、Cen、Max数值的功能,使用这个工具校准控制器非常简单,以校准方向盘的中心位置为例说说具体的操作方法:转动方向盘的方向轴,查看界面上是哪个轴对应的数据在动(方向轴通常是X轴),这样你就能知道你所操作的轴对应的是界面上的哪个轴了,然后把方向盘放在它的自然中点,看看Raw数据是多少,然后点击右边的X轴,在Cen处输入该数值再点Apply就OK了。如此简单!

  工具的左下有一个“MyTweaks”部分,提供的是把你的校准方案用一个你自己取的名字保存起来的功能,这为需要使用好几种不同的校准方案并时常切换的玩家提供了方便,注意这里当你Save或Load某方案的时候它会同时就自动Apply了。

  注意事项:该工具的在WindowsNT/2000/XP等NT类操作系统下设置的Deadzone(呆区)不能被保存(这其实是操作系统内部结构的原因,与该校准程序无关);该工具的自述文件里建议用户不要在游戏运行的时候使用该工具,对于校准来说,Apply以后就可以退出它并进入游戏了,如果在游戏的时候让它仍然保持运行,一则它非常消耗系统资源,二则,如果游戏运行的时候你在DXTweak里更改了校准设置,那么控制器在游戏里可能会发生工作异常,甚至有可能找不到控制器了。(详细说明可点击它的Readme按钮查看)

  (特别鸣谢-Z-先生将DXTweak推荐和介绍给我们)

  关于方向盘在游戏前的通用校准事项,基本就这么多了,至于各方向盘自带的驱动里提供的其他一些特殊功能,因为本人使用过的控制器非常有限,无法一一给大家进行详细的介绍。请大家查阅各自的控制器说明书以获得相关信息。这里只以微软PrecisionWheel为例简单介绍一下具有代表性的关于“分轴”的问题。微软PrecisionWheel共有三个能独立输出的轴,属于三轴式方向盘,但微软在它的驱动程序里为油门轴和刹车轴提供了两种不同的工作方式

  这两种工作方式分别叫做separate和combined其中separate就是我们说的“分轴”模式,即两个踏板是分开独立工作的,这种方式下是标准的三轴式方向盘模式,油门和刹车在游戏里能独立分开地起作用而互不影响。而combined模式的意思是把油门和踏板组合成一个轴,这种模式下–Y轴为油门,+Y轴为刹车,这样实际上也就是把这个方向盘变成了一个标准的两轴式方向盘了,这种模式下油门和刹车不能在游戏里同时互不影响地独立工作。在这里我推荐大家使用separate也就是“分轴”模式,因为任何真实的汽车中,油门踏板和刹车踏板都是独立工作的,不会互相牵扯,同时,分轴模式还能使用某些特殊的驾驶技巧(如“跟趾”)

  一个特别的现象是:微软的方向盘在Win9x/ME和Win2000操作系统里,如果不安装方向盘带的驱动而让Windows直接认出来,那么它的油门和刹车踏板是工作在“分轴”模式的(不可选择)而在WinXP里,如果不装驱动,它们却是工作在组合模式的(同样不可选择).据悉还有某些其他的三轴式方向盘也在驱动里为两个踏板轴提供了类似的两种工作模式)。

  从上图可以看到,这里还有一些简单的与校准有关的设置,如右边的所谓Sensitivity(灵敏度)设置,实际上是控制器有效行程设置,当设置到最左边Low的位置的时候相当于使用控制器的全部有效行程,也即是前文所述的“校准行程=物理行程”的意思,而越往右边High方向设置,则使用越少的控制器物理行程,这时候相当于前文说的“校准行程<物理行程”的校准方式,即方向盘会显得更加灵敏(但控制精度下降),而左边的DeadZone一目了然就是常说的“呆区”设置了,需要注意的是这个设置同样是只能在Win9x/ME下正常工作,如果你使用Win2000/XP等NT类操作系统,那么这个设置并不能正常有效。  

你可能感兴趣的:(思考,问题,C)