マーカーのスクリーン座標系における3次元座標を得る Processing

Post date: Feb 11, 2013 3:43:29 AM

マーカーのスクリーン座標系における2次元座標はgetMarkerVertex2Dによって簡単に取得できるが、3次元座標は得ることが出来ない。

そこで、スクリーン座標系におけるマーカーの座標を得るプログラムを書いてみた。

import jp.nyatla.nyar4psg.*; // NyAR4psg import codeanticode.gsvideo.*; GSCapture cam; // キャプチャ MultiMarker ar; // ARマーカに関する処理をするオブジェクト int id; // マーカに割り当てられるID番号 float x, y, z; void setup() { size(640, 480, P3D); // 画面の設定 cam = new GSCapture(this, width, height); // キャプチャの準備 // ARをやるための準備 ar = new MultiMarker(this, width, height, "camera_para.dat", NyAR4PsgConfig.CONFIG_PSG); id = ar.addARMarker("twittericon.pat", 80); // パターンファイルとマーカサイズの登録 cam.start(); } void draw() { // カメラの用意ができていないときは処理をせずに出る if (cam.available()==false) return; cam.read(); // カメラ画像の読み込み background(0); // 画面の初期化 ar.drawBackground(cam); // 背景画像の描画 ar.detect(cam); // マーカ認識 resetMatrix(); ar.setARPerspective(); // マーカが認識されていたら if ( ar.isExistMarker(id) ) { PMatrix3D temp=ar.getMarkerMatrix(id); x=temp.m03; y=temp.m13; z=temp.m23; translate(x, y, z); box(80); } }