NyARTransMat_C_version

このモジュールは、NyARToolkitに搭載されている変換行列計算用のNyARTtansMat関数を、
C言語で使えるように移植したものです。

オリジナルARToolkitのarGetTransMat/arGetTransMatCont関数と差換えることにより、約3倍速度が向上します。

オリジナルのarGetTransMat関数と引数・戻り値の互換性があるので、
簡単な差し替え作業で、ARToolkitプログラムの高速化が期待できます。

”このパッチは、NyARToolkit/1.0系の実装です。”より高速なバージョンをご希望の方は、NyARToolkit/2.4系以降のソースコードをご利用下さい。

Download

NyARTransMat C version for original ARToolKitのソースコードは、Sourceforgeからダウンロードすることが出来ます。

Sorceforge.jp#NyARTransMat C version for original ARToolKit

導入方法

  1. ARToolKitのARToolKit\lib\SRC\ARディレクトリに、nyar_NyARTransMat.cをコピーする。
  2. ARToolKitのARToolKit\include\ARディレクトリに、nyar_NyARTransMat.hをコピーする。
  3. VCのプロジェクトに、nyar_NyARTransMat.cを追加する。
  4. nyar_NyARTransMatを使う.cファイル(main.cとか)に、nyar_NyARTransMat.hをインクルードする。
  5. arInitCparam直後に、nyar_NyARTransMat_O2_create関数コールを加える。(引数には、arInitCparamに渡したものと同じARParam構造体を渡す。)
  6. arGetTransMatをコールしているところを、nyar_NyARTransMat_O2_transMatに置き換える。(関数の1番目の引数は、nyar_NyARTransMat_O2_createで作ったインスタンスを指定する。)
  7. プログラム終了前に、nyar_NyARTransMat_O2_free関数を呼びだす。(関数の1番目の引数は、nyar_NyARTransMat_O2_createで作ったインスタンスを指定する。)

うまく差し替えができれば、1マーカー当りのTransmat演算が3倍高速化されます。

高速化の仕組み

Transmat演算は、1マーカー当りARToolkit全体の約50%の負荷を生み出します。
この演算はマーカー1個に対して1回行われるため、マーカーの数が1個なら50%、2個なら66%、3個なら75%、4個なら87%の負荷が、この演算から発生することになります。

NyARTransMatはこの負荷を1/3にするので、1個のマーカーを処理する分には30%程度の速度向上しかありませんが、10個、20個とマーカー数が増えたときに、最大300%の速度向上を見込むことが出来ます。