HMD(VR920)使ってWebGL内を見渡してみた(試作)

HMDのVR920には加速度センサーがついているので、それを使うと、顔をどこに向けているのか分かります。
その情報を、node.jsのアプリを経由してWebSocketに送ると、顔の向きでWebGL内の視点の方向を動かして、WebGL内を見渡せます。
不完全な部分が多いので試作ですが、別な作業に移るので一旦ポストします。

デモムービー


実現方法とソースコード

1.VR920 --> 2.VR920のSDKのサンプルを改造したアプリ --[TCP]--> 3.ローカルNode.jsサーバー --[WebSocket(SocketIO)]--> 4.ブラウザでWebGL(scene.js)を使って表示

"2.VR920のサンプルを改造したアプリ"

HelloTracker2を改造。適当にフィルターしてTCPで投げる。

改造点のdiff: http://ndruger.lolipop.jp/hatena/20110212/throw.patch

"3.ローカルNode.jsサーバー"

TCPで情報を受け取り、jsonの正しい単位でまとめて、ブラウザにWebSocketで投げる。

ソース: http://www.syspri.org/store/vr920_trunnel/vr920_server/

"4.ブラウザでWebGL(scene.js)を使って表示"

WebSocketで情報を受け取り、Scene.jsのカメラのlookを変更する。角度からlookの計算にはglMatrixを使っている。
Vuzix SDKのドキュメントによるとyawは32768まで来るけど、試したら+-16383までしか来ないので、32768ではなく16383で割っている。

ソース: http://www.syspri.org/store/vr920_trunnel/client/

現状の課題

  • なんか右を向いたら、yawの値が想定と違っていて、うまくlookが移動してくれない。
    • pitchで修正する必要がある?今度ゲームに使うときには直しておく。任意軸回転が必要とかいう落ちかも。
  • いろいろ値の微調整が必要。

今後の発展

  • kinect + wiimoteと連携して、下記のようなものを作りたい
  • VR920は左右に違う映像を流せるので、それでWebGL内を立体視をしたい
    • iZ3DのVR920タイプの出力を使ってもどうもうまくいかない。切り替えが間に合ってないのかなぁ。