A9VG电玩部落论坛

 找回密码
 注册
搜索
查看: 3494|回复: 6

[原創]光枪2.0和鼠标2.0

[复制链接]

精华
0
帖子
76
威望
0 点
积分
81 点
种子
0 点
注册时间
2005-4-2
最后登录
2009-2-1
 楼主| 发表于 2007-6-15 20:26  ·  广东 | 显示全部楼层 |阅读模式
一定有很多人玩过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采用这种技术还是很恰当的。
---------
没有所见即所得效果,编辑下“图”。.

悟道者

Fabio Cannavaro

精华
11
帖子
43876
威望
12 点
积分
43956 点
种子
7 点
注册时间
2005-12-16
最后登录
2023-12-2
发表于 2007-6-15 23:06  ·  上海 | 显示全部楼层
轉帖?原創?
。。。。。。

精华
0
帖子
76
威望
0 点
积分
81 点
种子
0 点
注册时间
2005-4-2
最后登录
2009-2-1
 楼主| 发表于 2007-6-16 14:23  ·  广东 | 显示全部楼层
原創,请大家指正。

求败者

天下一人

精华
8
帖子
25477
威望
7 点
积分
25738 点
种子
7 点
注册时间
2007-5-6
最后登录
2021-1-15
发表于 2007-6-16 20:42  ·  北京 | 显示全部楼层
怎么有点像定量矢量单元指令集 我理科***........

悟道者

Fabio Cannavaro

精华
11
帖子
43876
威望
12 点
积分
43956 点
种子
7 点
注册时间
2005-12-16
最后登录
2023-12-2
发表于 2007-6-16 22:31  ·  上海 | 显示全部楼层
原創啊,浮云伺候^^
。。。。
spc

精华
0
帖子
7504
威望
0 点
积分
8038 点
种子
5 点
注册时间
2005-12-31
最后登录
2024-7-29
发表于 2007-7-30 09:50  ·  河南 | 显示全部楼层
不错不错支持一下。。。。。。。
该用户已被禁言

精华
0
帖子
19579
威望
0 点
积分
18758 点
种子
0 点
注册时间
2004-11-7
最后登录
2017-5-12
发表于 2007-7-30 10:30  ·  北京 | 显示全部楼层
一直不明白,如果“双截棍”可以完美轻松解决“光线枪问题”,街机厂商彻底也别混了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2024-11-22 19:33 , Processed in 0.173668 second(s), 14 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部