NyARToolkitでARマーカに画像を重畳したい。
なのでARマーカに合わせてCGで正方形を描画し、任意の画像をテクスチャとして貼ってみる。
下記のコードで動いた。
import processing.video.*;
import jp.nyatla.nyar4psg.*;
Capture cam;
MultiMarker nya;
// image setting
PImage t_image; // texture image
int t_image_l = 160; // marker and texture size
// display setting
int DISPLAY_W = 640; // display width
int DISPLAY_H = 480; // display height
void setup() {
size(DISPLAY_W, DISPLAY_H, P3D);
// Setup for NyARToolkit.
colorMode(RGB, 100);
println(MultiMarker.VERSION);
cam=new Capture(this, DISPLAY_W, DISPLAY_H);
nya=new MultiMarker(this, width, height, "camera_para.dat", NyAR4PsgConfig.CONFIG_PSG);
nya.addARMarker("patt.hiro", t_image_l);
// Setup texture
t_image = loadImage("hoge.jpg");
}
void draw()
{
if (cam.available() !=true) {
return;
}
cam.read();
nya.detect(cam);
background(0);
nya.drawBackground(cam);//frustumを考慮した背景描画
if((!nya.isExistMarker(0))){
return;
}
nya.beginTransform(0);
beginShape();
texture(t_image);
vertex(t_image_l/2*(-1), t_image_l/2*(-1), 0, t_image_l);
vertex(t_image_l/2, t_image_l/2*(-1), t_image_l, t_image_l);
vertex(t_image_l/2, t_image_l/2, t_image_l, 0);
vertex(t_image_l/2*(-1), t_image_l/2, 0, 0);
endShape();
nya.endTransform();
}
vertexで指定している、4つの引数が謎。
1番目はx座標、2番目がy座標であることはわかるが、3番目と4番目はなんだろう・・・?
テクスチャの幅・高さだろうか。
実行例
元画像
実行結果
テクスチャの画像を切り替えることで、アニメーションのように見せることも出来る。