LotosLabo

プログラミング技術とか気になった情報を載せていきます

【Oculus Rift】 YesNoGesture使ってみてちょっと詰まった所

こりんさんのOculus Rift Gestureを使ってみました。


いざこれを使って、YesとNo取ってみようと思ったのですが。
どうやら私がOculus SDK 0.4.2の方を使用していたため、OVRManagerが見つからないと怒られてしまいました。

0.4.2ではOVRManagerが存在しないので参照できません。

f:id:lo25131:20141129033111j:plain


なのでエラー元となるプログラムを見てみると、

f:id:lo25131:20141129033206j:plain


こんな感じで、Oculus Riftの位置と角度を取っているようです。
ということで、0.4.2でOculusの位置・角度を取る方法を開発リファレンスで眺めてみました。


ずらっー と眺めていって…


英語読めない(´・ω・`)


全部はさすがに読めませんでしたが、

ovrTrackingState ts = ovrHmd_GetTrackingState();
Posef pose = ts.HeadPose;

というのを見つけまして、ここでなんかポジション取ってるんだなと把握。
とりあえずやってみるべということで書いてみました。



追加部分

using OVR;

Hmd hmd = Hmd.GetHmd();
ovrTrackingState ts = hmd.GetTrackingState();
ovrPosef pose = ts.HeadPose.ThePose;


これでOculusのポジション情報は取れました。
ここまでは良かったのですが、これをいざ使うときに、

pose.Position, pose.Orientation

では使えないようで…



そもそもこの中身を調べてみたところ…

ovrVecto3f
ovrQuatf

あれ、型違うじゃん…

このままじゃ Vector3とQuaternionに入れても怒られてしまいます。


そこでこれをそれぞれ変換すればいいのでは!!
といろいろ探していたら見つけました。

OVRExtensions.ToVecto3();
OVRExtensions.ToQuaternion();



これでこいつらを変換して…


最終的にはこのようになりました。

f:id:lo25131:20141129035129j:plain


こんな感じにすることで、0.4.2でもYesNoGestureを使用できるようになりました。



だがしかし… もっと簡単な方法があった…


とまぁここまでやって気づいたのですが、OVRDeviceを見てみたら、

OVRDevice.GetCameraPositionOrientation

というのがあって、これで出来るんじゃね…てかこっちのほうが正式なやり方じゃねと思ったり…



試してみました。

Vector3 p = new Vector3();
Quaternion q = new Quaternion();
OVRDevice.GetCameraPositionOrientation(ref p, ref q);


いけました。
OVRDevice.GetCameraPositionOrientationの中身はそれぞれ(Vector3, Quaternionn)となっているので、この中に入れてあげればおkです。


ではおやすみなさい。