読者です 読者をやめる 読者になる 読者になる

processingとNyARToolkitでCGにテクスチャを貼る

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番目はなんだろう・・・?
テクスチャの幅・高さだろうか。

実行例

元画像

実行結果

テクスチャの画像を切り替えることで、アニメーションのように見せることも出来る。