むずかしいことはわかりません

いろいろ書いてるみたいな

Esenthel Engineを試してみてるんですけども。 - OculusRiftを使ってみた

正月の変なテンションのまま、Oculus Riftを注文しまして、1週間かからず届きました。*1

一通りジェットコースターなどを楽しんだので、次はEsenthel Engineをということになりました。*2

 

Esenthel EngineでOculus Riftを認識してるか調べるのは簡単です。

OculusRiftDetected()

という関数がtrueを返せばOculus Riftが認識されています。そうでなければ、認識されてない、それだけです。拍子抜けです。

そして、Oculus Rift用の映像にするには、

D.stereocpic(true);

 とするだけです。ただ、実際使う場合はサンプルのように

D.stereoscopic(OculusRiftDetected());

 としたほうが余計なことを考えずに済みます。

それから、Oculus Riftがつながっているときとつながっていないときで視野角(でいいのかな。Field of Viewだし)を毎回設定しています。

D.viewFov(OculusRiftFovY()); 

OculusRiftFovY()が、Oculus Riftでの視野角ということで97.575度(RadToDegで計算してみた値)を返してきますので、これがきっとOculus Riftで見たときの最適値なんでしょう。変えるときは、ここを変えればいいつーことですね。

次にOculus Rift本体側の傾きなどを取得する方法ですが、これも既に用意されている関数を呼ぶだけでした。

PredictedOrientation().angles();

ただ、このangles()で出てきた値の符号を反転してからカメラに設定しているところを見るとOculus Riftでは上が-1、下が1ということでEsenthelの座標系とは逆になっているようです。*3

持ってきた値をカメラの位置として処理すると右を向けば右の風景が見えて、左を見れば左の風景がみられるようになる、と。

サンプルの「Oculus Rift」では、横向きの回転(ヨー/Y軸回転)をマウスでもできるようにしてありますが、これは、Oculus Riftで左右を向いたときのシミュレートをしたかったのかもしれません。

上下の動きもシミュレートしたいということであれば、flt mouse_pitchを宣言して、カメラの設定を次のように書き換えればいけます。

// set camera based on Oculus Rift input

   mouse_yaw-=Ms.d().x;

   mouse_pitch -= Ms.d().y;

   

   Vec angles=PredictedOrientation().angles();

   Cam.yaw  =-angles.y+mouse_yaw;

   Cam.pitch=-angles.x+mouse_pictch;

   Cam.roll =-angles.z;

   Cam.dist =0;

   Cam.setSpherical().updateVelocities().set();

 

 これで、マウスを前後に動かせば上下にカメラが動きます。*4

 

ちなみに現在のところは、エディタ上でOculus Rift対応したプロジェクトを実行してもOculus Rift用の表示になりません。Projects\_Build_\[プロジェクト名]の中にある実行ファイルを動かすことでOculus Riftで見られます。そのうち対応されるでしょうけど。

※追記:Oculus Riftの認識を1つのプロセスからしか行えない仕様なので、こうなっているんだそうです。

 

 

先日のLeapMotionもそうですが、もっと苦労して認識させるようなイメージだったので拍子抜け。

*1:会社のやつを使わせてもらえばいいやと思ってたけど、家でも試したいし、持って歩くのが…箱でかいし

*2:Alone in the Riftこええ

*3:Esenthelの座標系の説明: http://www.esenthel.com/wiki/index.php?title=Screen_Coordinates

*4:前に出せば上、手前に引けば下を見ます