CALENDAR
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     
<< September 2019 >>
ARCHIVES
CATEGORIES
RECOMMEND
RECOMMEND
RECOMMEND
WiiRemoteプログラミング
WiiRemoteプログラミング (JUGEMレビュー »)
白井 暁彦,小坂 崇之,くるくる研究室,木村 秀敬
RECOMMEND
RECOMMEND
RECOMMEND
MOBILE
qrcode
<< GlovePIE実験(3) | main | ホントですか? >>
GlovePIE実験(4)
赤外線でカーソルを動かす
 Wiiリモコンの最大の特徴、それは赤外線スキャナと加速度センサーが標準で付いていることです。Wiiリモコンでのカーソルコントロールでは、赤外線・加速度、キー操作など考えられますが、ここでは赤外線スキャナを使ってマウスの替わりにしてみます。

 まず、カーソルがどのように表現されているかを調べました。

debug = mouse.x


 この1行のスクリプトだけ動かしてみます。GlovePIEに窓が出来て、PCのマウスを動かすとx軸移動の時だけ数字が変化するのが分かります。同じようにy軸も調べてみると、マウスカーソルが左上にあるとき(0.0)で、右下にあるとき(1.1)ということが分かります。
ここで、debugは、受け取った数字を見ることができる関数?です。文字通りdebugの時は重宝しそうです。この他にもdebugPrint()なんてのもあって、こちらは新たにウインドウが開きます。
 さて次に、赤外線スキャナでは位置がどう表現されているか調べます。同様に1行のスクリプトを実行してみます。

debug = Wiimote.dot1x


として実行してみます。ただし、Wiiリモコンの赤外線視野の中にdot1(赤外線点)がなければいけません。でないと、いろいろな赤外線発生源を拾ってきて、とんでもない数字になってしまいます。理想はゲーム機についているセンサーバーでしょうが、先に作ったLED赤外線ペンでもかまいません。(ボタンを押し続ける必要がありますが)
 実行すると、x軸方向にWiiリモコンを動かしたとき数字が0〜1023の範囲で動くことが確認できます。一番右に動かしたとき0で、一番左に動かしたとき1023です。y軸は同様に一番上に動かしたときが0で一番下が767です。

 これだけわかれば、PCのマウスと動きの方向と、スケールを合わせてやればオーケイです。

mouse.x = (1023 - Wiimote.dot1x) / 1023
mouse.y = (Wiimote.dot1y) / 767


 これでできました。しかし、これでは少し使いにくいです。分解能のぎりぎりまで動きを判定されますので、自分のようなアル中気味の手に持つとカーソルが一定しません。そこで、Smooth関数を使います。たとえば、過去3フレームの数字で平均する。さらに、2分解能以下の動きは無視するという設定にすると、次のようになります。

mouse.x = (1023 - Smooth(Wiimote.dot1x,3,2)) / 1023
mouse.y = (Smooth(Wiimote.dot1y,3,2)) / 767



 全体はこれ。

if Wiimote.dot1vis then
mouse.x = (1023 - Smooth(Wiimote.dot1x,3,2)) / 1023
mouse.y = (Smooth(Wiimote.dot1y,3,2)) / 767
endif


 if文を使い、Wiimote.dot1vis(dot1が見えているとき)が真のときのみカーソル操作ができるようにします。dot1が見えていないときは、通常のマウス操作ができます。
| GlovePIE | 12:03 | comments(0) | trackbacks(0) | pookmark |
コメント
コメントする









この記事のトラックバックURL
http://blog.h2caster.net/trackback/981482
トラックバック