ちょい前ですがOculus Rift DK2が届きました.
練習がてらSDKに付いていたサンプルを参考に,Oculus RiftをOGREで使うデモを作ってみました.
- バイナリ(64bit): OgreOculusVRSimple_bin.7z
- ソース: OgreOculusVRSimple_src.7z
HMDが無いと動きません.”Extend Desktop to the HDM”モードにのみ対応しています.
操作方法は普通のWASDキー+マウス操作です.Qキーで終了.
オプショナルな機能としてVキーを押すとレンズ歪みなしの表示ができます.表示は基本的にHMDに送られますが,
Ctrlキーを押したまま起動するとOGREのコンフィグダイアログの解像度/フルスクリーン設定で動かせます.
* * *
Oculus RiftのSDKは,いまのところDirectXやOpenGLなどの(ある種の低レベルAPI)にのみ対応したつくりになっています. Unityとかにも対応しているみたいですけど(もちろん,LibOVRを書き換えれば対応は可能です).
SDKによるレンダリングを使おうとすると,OGREのレンダーシステムがせっかく隠してくれている バックエンドAPIのリソースを掘り起こすことになるので,あまりきれいには実装できません.
ただまぁ正攻法ではないのですが,
- レンズ歪みに合わせた画像を表示して,
- HMDの姿勢を取得,
の二つができればよいわけで,表示部分に関してはOculus Rift SDKに頼る必要はあんまりありません. SDKのサンプルソース内の説明によれば非推奨とされてはいますが.
Oculus Riftでの表示方法(とそれをOGREで実現する方法)については,後日詳しくまとめたいと思いますが基本的には
- レンダーターゲットテクスチャに一つのシーンを二つのカメラで描く(オフスクリーンで描く).
- LibOVRが提供するディストーション用のメッシュに↑のテクスチャを貼り付けて表示する.
- この表示には専用のシェーダを使う(SDKのソースに埋め込まれてる).
- HMDから両眼の位置と向きを取得してビュー変換に反映させる.
ということのようです.
掲載したデモでは,これらのことをOGREのAPIのみを使って実現しています.