メニュー 閉じる

102. ProcessingでNyARToolkitを使ってなんちゃってAR03

たくさんのBOXを出してみる。
使用しているマーカーの画像ファイルと
カメラキャリブレーションデータは以下になります。

http://www.velvet-number.com/p5_test/test070/marker.png
(紙にプリント)
http://www.velvet-number.com/p5_test/test070/camera_para.dat
(作業フォルダ内「data」に入れておく)

動画はこちら。

http://www.velvet-number.com/p5_test/test070/20190207_mov.mov

import processing.video.*;
import jp.nyatla.nyar4psg.*;

Capture cam;

MultiMarker mm;

ArrayList<Particles> particles = new ArrayList<Particles> ();

void setup () {

	size (480, 270, P3D);
	colorMode (HSB, 100);

	String[] cameras = Capture.list ();

	printArray (cameras);

	cam = new Capture (this, cameras[21]);
	cam.start ();

	mm = new MultiMarker (this, width, height, "camera_para.dat", NyAR4PsgConfig.CONFIG_PSG);
	mm.addNyIdMarker (1, 80);

}

void draw () {

	if (cam.available () != true) {
		return;
	}

	cam.read ();

	mm.detect (cam);
	mm.drawBackground (cam);

	if (!mm.isExist (0)) {
		return;
	}

	particles.add (new Particles ());

	for (int i = 0; i < particles.size (); i++) {
		mm.beginTransform (0);
		particles.get (i).update ();
		particles.get (i).render ();
		mm.endTransform ();
	}

	if (particles.size () > 100) {
		particles.remove (0);
	}

	saveFrame ();

}

class Particles {

	float posx;
	float posy;
	float posz;
	float vz;
	float bs;

	float h_value;

	Particles () {

		posx = random (-40.0, 40.0);
		posy = random (-40.0, 40.0);
		posz = 0.0;

		vz = random (0.1, 10.0);

		bs = random (1.0, 20.0);

		h_value = random (100.0);

	}

	void update () {

		posz += vz;

	}

	void render () {

		
		fill (h_value, 100, 100, 50);
		translate (posx, posy, posz);
		box (bs);
		

	}

}

Posted in processing