ARToolKitの安定化 その④ ソースの公開 - ソースの説明

|
こちらも、Readmeの詳細説明用に使用いたします。

プログラムの大まかな処理は、その①その②を見てもらっても大体はわかります。
今回は少しプログラム寄りな説明になります。

安定化プログラムでは以下のような処理を行っています
・設定ファイルを読み込む
・通常表示
・関係値の計算
・計算結果を表示する
・補完処理を加えた表示
・関係値の保存

このプログラムでは、関係値のデータと処理を行うクラス"CObjectMultiCreator"があり、
上記の処理のほとんどは、このクラスのメンバ関数内で行っています。



では、それぞれの処理を見てみます

・設定ファイルを読み込む : 関数 LoadMultiRelationInf
設定ファイルには、"複数オブジェクトファイルへのパス"と、"関係値の値"が保存されています。
初期状態では"関係値の値"は存在しません。
詳しくは、その④-EXEの使い方を参照してください。


・通常表示
通常表示では、従来のARToolKitとほぼ同様の処理を行っています。


・関係値の計算 : 関数 CalcAllMarkerRelate
キー操作により、編集モードに入ったときに、関係値の計算が行われます。
関数に入る前に、従来と同じ方法で、各マーカーの座標変換行列  "object.trans" が計算されます。

ここでマーカーA, Bが見つかったとします。
そのとき次のような計算を行います。

1.座標変換行列、"A→カメラ"と、"B→カメラ"、が分かっている。
2.1の"B→カメラ"を反転して、"カメラB"にする。
3.1と2から、"A→カメラB"という行列計算を行う。
4.3から"A → B"という座標変換行列を得る。

平均値計算用に、サンプル数と行列の合計値を、メンバ変数に蓄えておきます。

ある程度、サンプル数が溜まったら、上記と同じ方法で誤差を計算します。
これも、サンプル数と合計値の形で、持っておきます。


・計算結果を表示する
計算が大体終了したら、それを表示し、ユーザーに知らせます。
ユーザーはこの表示を見て、計算の頃合を計り、編集モードを終了します。

表示に使用される値は、マーカー関係情報の構造体"MARKER_RELATE_INFO"の、誤差の合計値"dError"や、サンプル数"lRelCount"を使用します。


・補完処理を加えた表示  : 関数 GetGLTransFromRelate
関係値が計算できても、マーカーを問題なく取得できた場合には、通常の描画を行います。
問題は、マーカー情報が正しく取得できなかった場合です。

例えば、マーカーAの情報が取得できず、マーカーBは取得できたとします。
その時は、以下のような計算になります。

1.座標変換行列 "A →B"と"B → カメラ" が分かっている
2.1より、" A → B → カメラ" という行列計算を行う
3.2の結果から、"A → カメラ" という座標系変換行列を得る

というような感じです。


・関係値の保存 : 関数 SaveMultiRelationInf
最後に関係値の保存を行います。
ファイルにデータとして保存してしまえば、時間使用時、又は他のプログラムでも再利用できます。
実行のたびに関係値を計算する手間を、省けるわけです。



更なる詳細については、プログラムを読んだり、デバック実行して、理解していただくか、
それでも分からない場合は、メールにてご連絡ください。

このブログ記事について

このページは、PipeRが2008年4月10日 21:49に書いたブログ記事です。

ひとつ前のブログ記事は「ARToolKitの安定化 その④ ソースの公開 - EXEの使い方」です。

次のブログ記事は「ARToolKitの安定化 その④ ソースの公開」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01a