ネコと和解せよ

NyARToolkitCPP/0.10.0リリース+for Alchemyのリリース

NyARToolkitCPP(NyARToolkitのC++版)の0.10.0をリリースします。

Subversionには既に上がってますが、パッケージはまた明日にでも。

今回の目玉は、NyARToolkit/2.3.0系のIDMarkerシステムに対応したことです。とりあえずは1個のマーカを追いかけまわすことしかできませんが、企画上は9〜25bitのデータが格納できるので、いろいろと遊べるかもしれません。

関連記事:NyARToolkit/2.3.0リリース - nyatla@Hatena::Diary
関連記事:Alchemy版 FLARToolKit - nyatla@Hatena::Diary

Alchemy部分の実装はかなり絞ってるので、足りない関数とかがたくさんあると思う。引っ張り出したい関数があったら、コメントとかついったーで注文してください。

サンプル(Alchemy Version)

アプリ: http://nyatla.jp/tmp/flx-0.10.0/IdMarker.swf
マーカ: http://nyatla.jp/tmp/flx-0.10.0/id0.pdf

Idマーカの仕様書はこちら。
エラー - NyARToolKit - SourceForge.JP

ソース

swcファイルのソースコードはNyARToolkitのsourceforgeリポジトリ、デモプログラムのソースファイル+コンパイル済みのswcはSparkProjectにそれぞれあります。Alchemyのswcを改造したりしないなら、SparkProjectのものだけでOKです。

Sorceforge: NyARToolKit プロジェクト日本語トップページ - SourceForge.JP
SparkProject: /as3/FLARToolKit/branches/nyatla - Spark project

言い訳

NyARToolkitCPPの2.3.0系への移行にとんでもなく時間がかかった原因は……。(1)長いことほったらかし。(2)2.2→2.3で大規模更新があった。
ユーザーさんすくないと思って、こまめに更新しなかったのが不味かったようだ。作業自体も、JavaC#の4倍くらいの時間がかかるし。

Alchemyコンパイラの怪しい挙動に悩まされる等した。Alchemyでswc作る時に、リンクに問題があってもswcファイルは生成できてしまう。さらに、動作時にエラーが出る。エラーの出方に癖があるので、慣れるとわかるんだけど…。

AlchemyMasterをコールバック対応(AlchemyエリアからActionScript関数をコールバック)させる改造に時間がかかった。それと、ActionScriptオブジェクトの生存時間の調整とか。以前はAlchemyエリアで作成したオブジェクトは、Actionscriptエリアでdisposeしてたけど、今回からはコールバック関数、上位オブジェクトの寿命と同期させるようにした。Actionscriptエリアで不意に保存されて寿命切れになると、不定な値が返されちゃうけど、そこは寿命範囲を明記して運用でカバー。(かっこ悪いけどね。)disposeよりは、処理コスト的にも、実装効率的にもよろしい。(と思う。)

Alchemy→ActionScript関数の呼び出しは、引数の数を合わせないと成功しない。さらに、成功したかどうかもわからない。かなり悩んだ。

Alchemy→ActionScript関数の呼び出しは、ActionScript関数内で起きた例外を完全に無視する。そして何事もなく処理が進む。しばらく悩んだ。