» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

光枪2.0和鼠标2.0

一定有很多人玩过FC上的打鸭子.
用一个专门的光枪外设就可以做到"指哪打哪", 这一定让人感到很有趣吧.
据说还有的父母因此而担心电视会被损害的.-___-
然而这种光枪虽然不会真的对电视造成损害, 却存在两个问题:
一个是只适用于CRT电视, 另外一个则是画面会闪烁.

随着技术的进步, 新的光枪已经能够解决以上的两个问题了. 而且在新的游戏主机Wii上也采用了类似的技术.
下面我们来看看这种技术到底是怎么一回事:
首先声明, 我并没有权威的资料, 所有推论都是从别人的谈论加上猜测和观察得来。如果有误请指出。

1. 这种定位方式都由两部分组成, 一个是信号发射器, 一个是信号接收器.
那么, 光枪和屏幕到底那边发射那边接收呢?是否双向收发?
这里由于缺乏验证的手段, 所以判断的依据主要是网络上一些信息, 以及技术可行性.
某网友曾提到是屏幕旁边的红外线发射装置发送信号, 而光枪接收信号.
现在就以这个为起点, 看看是否能有一种可行的方案.(双向收发也不妨到单向收发无法解决问题时再考虑)
不过先等一等, 红外线? 为什么不是紫外线? 甚至是超声波?
应该是红外线对人体影响较小吧? 再说去看看街机, 屏幕的上下各有5个像灯一样的东西, 还略微发红光.
(超声波就应该是喇叭一类的东西了)
下面讨论就基于这个假设: 屏幕上下各有5个(共10个)红外线发射装置(下面简称发射点)发送信号,
光枪接收信号并计算出其指向的位置.

2. 如何定位? 它们是否能够提供足够的信息来计算光枪指向的位置?
最容易想到就是距离和角度, 那么获取这两个信息是否可行呢?
我认为, 距离很难获得, 主要是发射点和光枪的距离相对光速而言太短, 对测量的精度要求过高.
剩下就是角度了(这个再没有就没法玩了).
那么光枪的信号接收器应该是可以接收一定角度的信号了, 为了方便把它想像成眼睛.
现在我们在"眼睛"的正中间选择一个点作为基准点, 它对应瞄准的方向.
我们的目标是得到它瞄准的方向在屏幕上对应的点(我们把实际的瞄准点记为O, 计算的瞄准点记为O').
第一步, 获取了它与某个发射点的角度, 就可以得到瞄准点与这个发射点的偏移量.
不过, 这里得到的不是O'的坐标, 而是以发射点为圆心的一个圆.
为了得到O'的坐标, 我们首先确定坐标轴XY, 两个发射点就可以做到:
过两个发射点的射线可以作为一个轴, 另一个则与之垂直.(既然是射线, 就要求这两个发射点能被区分, 发射不同的频率是一种办法.)
这样,瞄准点与这个发射点的偏移角度,包括水平和垂直的偏移角度都有了,O'的坐标也就得到了。
再加上设置时的纠正数据,就基本上能得到实际的瞄准点的位置了。

3.但靠这种方法还是存在缺点的:
玩过这种光枪游戏(比如TC4或GS)的人也许会注意到这种情况,已经校准了,向左或右移动一步,准心就有偏移了。
为什么有这种情况?请看图:
A   D  B     C

         M
假设A,B,C对应屏幕旁的发射点,M是人站的位置,D是瞄准的位置。(现在我们只考虑水平的坐标计算,垂直的同理可得)
用B点做参考,角BMD已知,D就是可以计算的。
但这里有一个隐含的假设:M点,也就是人站的位置是固定的,设置时的纠正数据也是以此为准的。
我们再看一种极端情况:
A   D  B     C
                        N
         M
现在,假设人站在了N的位置上,当他再瞄准D点时,由于角BND小于角BMD,所以程序计算出来的位置会在B和D之间。也就是说,你的位置往哪个方向偏,准心也会往那个方向偏。
正因为有这种情况存在,所以可以判断这种光枪采用的是两点定位。之所以有10个发射点,我认为是为了提高精确度,当接收到多个发射点的信号时,取偏移角度最小的。
还有一点要说明的:
定位用的是光枪的位置而不是人的,所以即使是人不动,光枪的位置也会随瞄准的方向发生变化。
但这个是可以通过程序纠正的。

4.一种可能的改进方案?
这个方案可能会有问题,请大家指正。
这里我们仍然只考虑水平的坐标计算,垂直的同理可得。
在上面的方案中,只用到了两个发射点,如果用3个呢?请看图(注意这里O就不是处于中间了):
A      B      C




           O
在这个坐标系里,A(Xa,Y), B(Xa+d,Y), C(Xa+2*d,Y)都为已知,AB和BC的距离也已知,设为d,
角AOB,角BOC已知。
求:O(Xo,Yo)

再加一个辅助点D,它是O在直线AC的垂点。
A      B D    C




           O

已知量:
Xa, Y, d
角AOB,角BOC
求:
Xo,Yo

(Xo-Xa)/(Yo-Y)=tan(角AOD)
(Xo-(Xa+d))/(Yo-Y)=tan(角BOD)
角AOD-角BOD=角AOB
(Xo-(Xa+2*d))/(Yo-Y)=tan(角COD)
角COD+角BOD=角BOC

设Xa=0,Y=0,化简得:
Xo/Yo=tan(角AOD)
(Xo-d)/Yo=tan(角BOD)
角AOD-角BOD=角AOB
(Xo-2*d)/Yo=tan(角COD)
角COD+角BOD=角BOC

未知数:
角AOD
角BOD
角COD
Xo
Yo
5个方程,5个未知数

然后,可以用Xo,Yo来求瞄准E:
A      B D E  C




           O

(Xe-Xo)/Yo=tan(角EOD)
角EOD+角BOD=角BOE
未知数:
Xe
角EOD
2个方程,2个未知数



两点定位对于光枪来说不是很足够,但如果仅用来当鼠标的话就非常合适了,因为只要偏移量,不用去真正的瞄准。Wii采用这种技术还是很恰当的。


TOP

人才啊。。。



TOP

楼主分析的很用心啊。


其实Wii的手柄很简单:
Sensor Bar 感应条是定位信号发射器 一共有十个红外线发射装置,并且以一定角度偏离,而Wii的手柄前方是接收器,这组传感器是用于定位手柄在平行于屏幕平面的面内的XY坐标上的位置。
手柄内部应该是装有加速度传感器,可以方便的检测手柄在平行于屏幕的轴,垂直与平面的轴上的转动和倾斜。
组合起来就可以基本上检测所有的运动。

早期的光枪原理也是通过屏幕发射信号,并且在按下扳机的瞬间某个坐标的值会被枪接受,与内存内目标的值进行比较,相等则击中。


TOP

有谁贴个FC光枪的原理

TOP

引用:
原帖由 fctg 于 2007-6-13 22:59 发表
有谁贴个FC光枪的原理
懒得写了Baidu或者Google吧。

TOP

FC光枪的原理据说是
根据扫描线刷新速度这点,根据正对着屏幕出颜色变化的时机计算位置。

似乎是扳机按下时先来一祯全黑,再来一祯全白
然后在某个时刻正对着的屏幕刷新为白色
根据这个时刻和全白祯启动时刻的时间差
除以刷新一个像素所需的时间
然后再除一行的像素数
其中结果就是第几行,余数就是第几个。

TOP

引用:
原帖由 卖哥 于 2007-6-13 23:15 发表
FC光枪的原理据说是
根据扫描线刷新速度这点,根据正对着屏幕出颜色变化的时机计算位置。

似乎是扳机按下时先来一祯全黑,再来一祯全白
然后在某个时刻正对着的屏幕刷新为白色
根据这个时刻和全白祯启动时刻的时间差
除以刷新一个像素所需的时间
然后再除一行的像素数
其中结果就是第几行,余数就是第几个。
没有黑帧,只有白帧

按下扳机的同时,游戏机发出一个白帧,同时记录下系统时间T1

枪筒里面有个感光器(简化的摄像头),当白色光线直射进入枪筒的时候动作,游戏机这时会记录下系统时间T2

两者的时间差,T=T2-T1

比如480I@60HZ,就是说这一个白帧会显示16666.6us(微秒),而隔行扫描会扫过240线,就是说每条线69.44us

比如时间差T=12345us,12345÷69.44=177.768

则Y=177÷240×480=354,X=0.768×640=492,就是说光枪在640×480的一副画面上指着点(492,354)

光枪是及其精确的三点一线(屏幕点,枪口,枪内感光器),你甚至可以在枪筒上加上红外线瞄准器

Wii由于机制不同,无法做到绝对精确,计算的只是相对偏移,电视上面有红外线发射(至少两个),手柄上有红外线接收

手柄会把红外线的角度变化和自身姿态变化通过蓝牙传给Wii,这样Wii可以计算出相对偏移



另外,比如上图,光枪两种姿势均可玩,Wii只能用左侧瞄准姿态

[ 本帖最后由 藕是张力 于 2007-6-14 01:32 编辑 ]

TOP

Wii由于机制不同,无法做到绝对精确,计算的只是相对偏移,电视上面有红外线发射(至少两个),手柄上有红外线接收


这不是缺点,相反解决了手总要保持一个姿势而产生疲劳的缺点。

所以wii的原理比起光抢更接近于鼠标。

TOP

同ls,wii手柄的其实当成鼠标比当成光枪合适。

TOP

受教了

TOP

引用:
原帖由 handsomeken 于 2007-6-13 22:40 发表
楼主分析的很用心啊。


其实Wii的手柄很简单:
Sensor Bar 感应条是定位信号发射器 一共有十个红外线发射装置,并且以一定角度偏离,而Wii的手柄前方是接收器,这组传感器是用于定位手柄在平行于屏幕平面的 ...
一直没有想明白为什么Sensor Bar一共有十个红外线发射装置, 我觉得有两个就够了,只要发射不同的频率。
光枪这边也是,实际上不是10个,而是20个。因为每个红外线发射装置都有两个“灯“。
但这两个“灯“离的很近,接收器恐怕不好区分它们。

TOP

发新话题
     
官方公众号及微博