このモジュールは、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
導入方法
- ARToolKitのARToolKit\lib\SRC\ARディレクトリに、nyar_NyARTransMat.cをコピーする。
- ARToolKitのARToolKit\include\ARディレクトリに、nyar_NyARTransMat.hをコピーする。
- VCのプロジェクトに、nyar_NyARTransMat.cを追加する。
- nyar_NyARTransMatを使う.cファイル(main.cとか)に、nyar_NyARTransMat.hをインクルードする。
- arInitCparam直後に、nyar_NyARTransMat_O2_create関数コールを加える。(引数には、arInitCparamに渡したものと同じARParam構造体を渡す。)
- arGetTransMatをコールしているところを、nyar_NyARTransMat_O2_transMatに置き換える。(関数の1番目の引数は、nyar_NyARTransMat_O2_createで作ったインスタンスを指定する。)
- プログラム終了前に、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%の速度向上を見込むことが出来ます。