class TrackerSingleMarker : public Tracker
とあるので、TrackerSingleMarkerとTrackerMultiMarkerはTrackerクラスを継承しているとわかる。C++のクラスについてよくわかっていないので、勉強する。
うーんおもろい。
でも問題はnewできないんだけどな。少なくともTrackerSingleMarkerクラスなど派生クラスにはデストラクタしかない。コンストラクタは、Trackerにあるのか見てみる。ないな。
TrackerMultiMarkerImpl.hあった。TrackerSingleMarkerImpl.hこっちもあった。
TrackerSingleMarkerImplはTrackerSingleMarkerを継承しているクラスである。
TrackerSingleMarkerImpl(int nWidth=DEF_CAMWIDTH, int nHeight=DEF_CAMHEIGHT);
ということなので、引数を2個入れればnewできるっぽい。無理。「こういうのインターフェースクラスっていうんだよ、バカ」って、機械に教えられたので調べる。
mTracker = new ARToolKitPlus::TrackerSingleMarkerImpl <6, 6, 12, 1, 10> (mWidth, mHeight);
という宣言方法があったので試してみると一応通った。
この数字はいったい何をしているのかきになったので 調べると。
/// TrackerSingleMarkerImpl implements the TrackerSingleMarker interface
/**
* __PATTERN_SIZE_X describes the pattern image width (16 by default).
* __PATTERN_SIZE_Y describes the pattern image height (16 by default).
* __PATTERN_SAMPLE_NUM describes the maximum resolution at which a pattern is sampled from the camera image
* (64 by default, must a a multiple of __PATTERN_SIZE_X and __PATTERN_SIZE_Y).
* __MAX_LOAD_PATTERNS describes the maximum number of pattern files that can be loaded.
* __MAX_IMAGE_PATTERNS describes the maximum number of patterns that can be analyzed in a camera image.
* Reduce __MAX_LOAD_PATTERNS and __MAX_IMAGE_PATTERNS to reduce memory footprint.
*/
これはTrackerImplで以下のように使われる。
/// TrackerImpl implements the Tracker interface
template <int __PATTERN_SIZE_X, int __PATTERN_SIZE_Y, int __PATTERN_SAMPLE_NUM, int __MAX_LOAD_PATTERNS, int __MAX_IMAGE_PATTERNS>
class TrackerImpl : public Tracker
{
public:
enum {
PATTERN_WIDTH = __PATTERN_SIZE_X,
PATTERN_HEIGHT = __PATTERN_SIZE_Y,
PATTERN_SAMPLE_NUM = __PATTERN_SAMPLE_NUM,
MAX_LOAD_PATTERNS = __MAX_LOAD_PATTERNS,
MAX_IMAGE_PATTERNS = __MAX_IMAGE_PATTERNS,
WORK_SIZE = 1024*MAX_IMAGE_PATTERNS,
#ifdef SMALL_LUM8_TABLE
LUM_TABLE_SIZE = (0xffff >> 6) + 1,
#else
LUM_TABLE_SIZE = 0xffff + 1,
#endif
};
一日経って
昨日はノートPCの上にみそ汁をこぼし、頭が真っ白になる。不幸中の幸いにも、データが飛ばなかった。キーボードがショートしているみたいだ。したボタンが効かない。でも壊れるのはいつになるかということで、開発時間の大半をバックアップにとられた。
1行も進展しないまま、三日目になった矢先の事件のため、さすがに精神的にきつくなる。朝起きて、パソコンと向き合い、夜が来る。基本コードをよんでいるだけ。さすがに集中力がなくなり、床につく、、、。頭の中では、こうすれば、、、ああすれば、、、とぐるぐる回っている。
マーカー情報がどうしてもかえってこないのだ。
今日もだめかもしれないな、、、と朝から3時間ほどリサーチを続けると、元ソースが複雑に処理している部分に気づく。文献をあたると、そこまで複雑な条件判定をかけていない。これを外し、coutでコンソールに値を出すと、なんと動きはじめた。確かに何かを認識している動きである。
for(j = 0; j < marker_num; j++){
if(nPattern==marker_info[j].id){
if(k == -1)k = j;
else if(marker_info[k].cf < marker_info[j].cf)k = j;
}
}
cfという情報はコンフィデンスもっともらしさを数字で表したもの。
ふー、なんとか動き出した様子である。後はこれをどう取り出すかだなあ。
if(nMarker_info)
*nMarker_info = marker_info;
このようにmarker_infoと書いてあるのはARMarkerInfoというクラスのオブジェクトなので、nMarker_infoがさしているポインタがさしているポインタ、のなかにその実態があるはず、、、。どこだ?
最終更新:2012年11月20日 13:58