cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

OculusRift dk1をopenFrameworksで動かす

おもちゃを動かすシリーズが続いています。埃をかぶったままのOculusRiftが山積みのまま何台もあって勿体ないので、動かして見ます。例によって、Windows7, VisualStudio2012の環境で、openFrameworksを使って先人のaddonを利用して動かします。

1.OculusRift SDKのインストール

その前に、準備として普通にOculusRiftのSDKをインストールしてください。[1]のリンクからダウンロードして適当な場所に解凍します。バージョン更新が頻繁に行われています。ここでは、Oculus SDK - 0.3.2 Preview 205-22-2014を使いました。

書いておいて後から気づいたのですが、これ使っていませんね。

2.ofxOculusRiftのインストール

ofxOculusRiftのオリジナルはandreasmullerさんのバージョン[2]のようです。これは、外部addonのofxMidi[3]を必要としたり、vs2010のプロジェクトで配布されていてvs2012に更新する際に不具合を起こしたり、なかなか厄介です。

もっとシンプルな物が無いかと探したところ、obviousjimさんが改良したバージョンがありました。ここではこれを使います。

[4]のリンク先から画面右側のDownload Zipボタンでソースを落として解凍し、-masterを消すように改名します。それをopenframeworksのaddonフォルダに放り込みます。

example-OculusRiftRenderingフォルダの中にOculusRenderingBasic.slnがありますのでこれを開きます。とりあえずビルドを掛けてみると、いくつかエラーが出てきます。Debugモードだと、ワサワサ出てくるのでReleaseモードに切り替えて試します。

'Ptr' : あいまいなシンボルです。

が根本の悪さの原因で、ofxOculusRift.hファイルの冒頭部で、

using namespace OVR;

してしまっていることが原因です。ヘッダーファイル内でusing namespace を使うと関連しない他のファイルのコンパイルにも波及してしまうので、ヘッダーファイル内でusing namespaceしてはいけません。面倒でも、OVR::と名前空間を一つ一つの変数に明示します。using namespace OVR;はofxOculusRift.cppの冒頭部に移動します。

OVR::Ptr<OVR::DeviceManager> pManager;
OVR::Ptr<OVR::HMDDevice> pHMD;
OVR::Ptr<OVR::SensorDevice> pSensor;
OVR::SensorFusion* pFusionResult;
OVR::HMDInfo hmdInfo;

おそらくこの5行を直せばコンパイルは通ります。スタートアッププロジェクトがopenframeworksLibにフォーカスされてしまっているので、ソリューションエクスプローラ内でOculusRenderingBasicを選んで右クリックして、スタートアッププロジェクトに設定、します。

 

OculusRiftを繋いで、電源を入れて実行。

f:id:cvl-robot:20140723191146g:plain

キャプチャが上手くいかずにカクカクになってしまっていますが、ちゃんと動くようになりました。

 

Debugモードで上手くコンパイルできない原因は、openframeworksLibのプラットフォームになぜかx64が指定されてしまっているためなので、構成マネージャを開いてWin32をプラットフォームに指定します。

 

[1]Developer Center: https://developer.oculusvr.com/

[2]ofxOculusRift: https://github.com/andreasmuller/ofxOculusRift

[3]ofxMidi: https://github.com/danomatika/ofxMidi

[4]ofxOculusRift(obviousjim ver.): https://github.com/obviousjim/ofxOculusRift/