Oculus RiftのANEをFlashDevelopで設定してみる。

OculusRiftTestThumbOculus Rift(オキュラス・リフト)は内蔵センサーの値をPC側に投げることにより、ヘッドトラッキングを可能にしているヘッドマウントディスプレイです。
このセンサーの値をAIRで受け取るためのANE(AIR Native Extensions)が公開されています。ここでは、FlashDevelopでの設定手順を紹介します。

◆実行例

OculusRiftTestCap
受け取った値を表示するだけの単純なもの。

◆準備

・oculus-ane

ダウンロードする。
https://github.com/jonathanhart/oculus-ane

◆プロジェクトを作る

新規プロジェクトウィンドウを出して、「AIR AS3 Projector」を選びます。
ここでは「OculusRiftTest」にしました。

◆ライブラリの認識

ダウンロードしたファイル内のoculus-ane-master/ane/as3/srcから、「oculusANE」ディレクトリをsrc内に追加します。

プロジェクトディレクトリ下に「extension」ディレクトリ、さらにその下に、「release」と「debug」ディレクトリを作ります。

releaseとdebug両方のディレクトリにoculus-ane-master/ane/bin/内の「OculusANE.ane」を追加します。
debugディレクトリのほうは、拡張子をzipにして、解凍します。
そして解凍したディレクトリを「OculusANE.ane」という名前にします。
OculusANE.zipは不要なので、削除します。

◆Main.asを記述

次のコードを記述します。
oculus-ane-master/demos/generic-headTracking/src/TrackerDemo.asを改変したものです)

[sourcecode language=”as3″]
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;

import oculusANE.OculusANE;

public class Main extends Sprite
{
private var _ovr:OculusANE = new OculusANE();
private var _textField:TextField;

public function Main()
{
_textField = new TextField();
_textField.width = 500;
addChild(_textField);

if (_ovr.isSupported()) {
this.addEventListener(Event.ENTER_FRAME, handleEnterFrame);
var obj:Object = _ovr.getHMDInfo();
} else {
trace("Oculus Rift not connected or unsupported.");
_textField.text = "Oculus Rift not connected or unsupported.";
}
}

private function handleEnterFrame(event:Event) : void
{
var vec:Vector.<Number> = _ovr.getCameraQuaternion();
trace("Vec: " + vec[0] + "/" + vec[1] + "/" + vec[2] + "/" + vec[3]);
_textField.text = "Vec: " + vec[0] + "/" + vec[1] + "/" + vec[2] + "/" + vec[3];
}
}
}[/sourcecode]

◆application.xmlの記述

23~27行目を追加します。
[sourcecode language=”xml” highlight=”23,24,25,25,26,27″]
<?xml version="1.0" encoding="utf-8" ?>
<application xmlns="http://ns.adobe.com/air/application/3.9">

<id>OculusRiftTest</id>
<versionNumber>1.0</versionNumber>
<filename>OculusRiftTest</filename>

<name>OculusRiftTest</name>
<description></description>
<copyright></copyright>

<initialWindow>
<title>OculusRiftTest</title>
<content>OculusRiftTest.swf</content>
<systemChrome>standard</systemChrome>
<transparent>false</transparent>
<visible>true</visible>
<minimizable>true</minimizable>
<maximizable>true</maximizable>
<resizable>true</resizable>
</initialWindow>

<supportedProfiles>extendedDesktop</supportedProfiles>

<extensions>
<extensionID>oculusAne</extensionID>
</extensions>
<!–
More options:
http://livedocs.adobe.com/flex/3/html/File_formats_1.html#1043413
–>
</application>
[/sourcecode]

◆Run.batの記述

10行目に
[sourcecode language=”text” firstline=”10″]
-extdir extension/debug/
[/sourcecode]
を追加します。

[sourcecode language=”text” highlight=”10″]
@echo off
set PAUSE_ERRORS=1
call bat\SetupSDK.bat
call bat\SetupApplication.bat

echo.
echo Starting AIR Debug Launcher…
echo.

adl "%APP_XML%" "%APP_DIR%" -extdir extension/debug/
if errorlevel 1 goto error
goto end

:error
pause

:end
[/sourcecode]

◆動作確認

以上でデバッグは出来るようになっているはずです。
動かなければ、Flex SDK 4.6以上であることを確認してください。

◆bat/Packager.batの記述

6行目の拡張子部分をexeにし、
11行目を次のように書き換えます。
[sourcecode language=”text” firstline=”11″]
call adt -package -XnoAneValidate -tsa none %OPTIONS% %SIGNING_OPTIONS% -target native %OUTPUT% %APP_XML% %FILE_OR_DIR% -extdir extension/release/
[/sourcecode]

[sourcecode language=”text” highlight=”6,11″]
@echo off
if not exist %CERT_FILE% goto certificate

:: AIR output
if not exist %AIR_PATH% md %AIR_PATH%
set OUTPUT=%AIR_PATH%\%AIR_NAME%%AIR_TARGET%.exe

:: Package
echo.
echo Packaging %AIR_NAME%%AIR_TARGET%.air using certificate %CERT_FILE%…
call adt -package -XnoAneValidate -tsa none %OPTIONS% %SIGNING_OPTIONS% -target native %OUTPUT% %APP_XML% %FILE_OR_DIR% -extdir extension/release/
if errorlevel 1 goto failed
goto end

:certificate
echo.
echo Certificate not found: %CERT_FILE%
echo.
echo Troubleshooting:
echo – generate a default certificate using ‘bat\CreateCertificate.bat’
echo.
if %PAUSE_ERRORS%==1 pause
exit

:failed
echo AIR setup creation FAILED.
echo.
echo Troubleshooting:
echo – did you build your project in FlashDevelop?
echo – verify AIR SDK target version in %APP_XML%
echo.
if %PAUSE_ERRORS%==1 pause
exit

:end
echo.
[/sourcecode]

◆PackageApp.batの記述

8行目に「-tsa none」の記述がある場合は削除します。
[sourcecode language=”text” firstline=”8″]
set OPTIONS=-tsa none
[/sourcecode]

[sourcecode language=”text” highlight=”8″]
@echo off
set PAUSE_ERRORS=1
call bat\SetupSDK.bat
call bat\SetupApplication.bat

set AIR_TARGET=
::set AIR_TARGET=-captive-runtime
set OPTIONS=
call bat\Packager.bat

pause
[/sourcecode]

◆開発用証明書の P12 ファイルの作成

bat/CreateCertificate.batを実行します。
「OculusRiftTest.p12」ファイルが生成されます。

◆AIRアプリケーションファイルの生成

PackageApp.batの実行をします。
airディレクトリ内に、「OculusRiftTest.exe」が生成されます。
実行すると、インストールされます。

◆ファイル構成

OculusRiftTest

◆生成されたexe

OculusRiftTest.exe

◆謝辞

今回使用したOculus Rift本体は、株式会社オリハルコンテクノロジーズからお借りしたものです。ありがとうございました。