2009年2月3日火曜日

ARToolkit+WPFのサンプルらしきものを見つけた

http://www.hitlabnz.org/forum/showthread.php?t=546
http://www.brains-n-brawn.com/default.aspx?vDir=wpfaugreal

NyARToolkit with WPFの途中経過

980円で買ってきた超安物のPCカメラでもサンプルプログラムはちゃんと動いてなかなか面白かった。

自分で書いたWPFアプリケーションのコードも、PCカメラからキャプチャした動画を表示してマーカーを検出する所までは簡単にできた。

問題は、やはりマーカー座標系からカメラ座標系への変換と射影変換。

private Matrix3D NyARDoubleMatrix34ToMatrix3D(NyARDoubleMatrix34 mat)
{
return new System.Windows.Media.Media3D.Matrix3D
(mat.m00,mat.m10,mat.m20,0,
mat.m01,mat.m11,mat.m21,0,
mat.m02, mat.m12, mat.m22, 0,
mat.m03,mat.m13,mat.m23,1);
}

こういうメソッドを作っておいてViewport3D.Cameraの子要素にしたMatrixCameraオブジェクトであるMainViewport3DCameraに対して

//AR用カメラパラメタファイルをロード
m_ap = new NyARParam();
m_ap.loadARParamFromFile(Properties.Settings.Default.AR_CAMERA_FILE);
m_ap.changeScreenSize(Properties.Settings.Default.Width, Properties.Settings.Default.Height);

//投影行列をAR用カメラパラメタから設定
NyARPerspectiveProjectionMatrix ProjectionMatrix = m_ap.getPerspectiveProjectionMatrix();
MainViewport3DCamera.ProjectionMatrix = NyARDoubleMatrix34ToMatrix3D(ProjectionMatrix);

こんな感じで射影行列を設定。んでもってModelVisual3DオブジェクトであるcubeVisual3Dに対して

cubeVisual3D.Transform=new MatrixTransform3D(NyARDoubleMatrix34ToMatrix3D(result_mat));

こんな感じで変換行列を設定。

コードとしてはこんな感じで良いはずなのだが、何かを勘違いしていて動かない。

そもそも変換行列の類は意味合いがライブラリ/フレームワークでみんな異なるからなあ。でも、行列の行-列番号のアサインとかちゃんと確かめたんだけどなあ。

ARTOOLKITとNyARTOOLKIT事始め

NyARTOOLKIT For C#を使い、キャプチャはキット任せ、グラフィックはWPFの3D描画を使って何かやってみよう作戦の覚書:

NyARTOOLKITを使うので、ARTOOLKITはソースは必要なく、キャリブレーションやパターンデータファイルの作成用ツールをバイナリで入手できれば十分。なのでSourceForgeのページからARToolKit-2.72.1-bin-win32.zipをダウンロードして適当な場所に解凍しておく。

これらバイナリの使用にはGLUTが必要。Nateのページからglut-3.7.6-bin.zipをダウンロードして中身のglut32.dllをsystem32フォルダにコピー。Windows SDKをインストールしているので、せっかくだからついでにc:\program files\Microsoft SDKs\Windows\v6.1フォルダ以下のInclude\glフォルダにglut.hを、Libフォルダにglut.libをコピーしておく。

NyARTOOLKITはDirectX SDKを必要とする。ここからDirectX SDK (November 2008)をダウンロード。

NyARTOOLKITはここからNyARToolkitCS-2.1.1.zipをダウンロード。適当に解凍。DirectX SDKが導入されていれば直ちにforFW2.0\NyARToolkitCS.slnをビルド可能。せっかくなのでここにあるUma2Desktop(for Windows(.Net Framework))をダウンロード。これも直ちにビルド可能。

TODO:
1.描画をWPFにやらせたいので、NyARToolkitのCaptureTestサンプルアプリケーションを下にスケルトンを作る
2.工学ナビの記事を下にARToolkit付属のバイナリを使ってパターンファイルとキャリブレーションファイルを作ってみる。