NyARToolkitV4を作ってます。
processing版で導入したAPIが好評だったので、同じように使うための仕組みを実装しています。
こんな感じのコードで複数のマーカが認識できるようになる(はず)です。
package jp.nyatla.nyartoolkit.jogl.sample.sketch;
import javax.media.opengl.*;
import jp.nyatla.nyartoolkit.*;
import jp.nyatla.nyartoolkit.core.param.*;
import jp.nyatla.nyartoolkit.jmf.utils.*;
import jp.nyatla.nyartoolkit.jogl.sample.NyARGlMarkerSystem;
import jp.nyatla.nyartoolkit.jogl.utils.*;
/**
* JMFからの映像入力からマーカ2種を検出し、そこに立方体を重ねます。
* ARマーカには、patt.hiro/patt.kanjiを使用して下さい。
*/
public class SimpleLite extends GlSketch
{
private NyARJmfCamera camera;
private NyARGlMarkerSystem nyar;
public void setup(GL gl)throws NyARException
{
this.size(640,480);
NyARParam param=new NyARParam();
param.loadDefaultParameter();
param.changeScreenSize(640,480);
this.camera=new NyARJmfCamera(param,30.0f);//create sensor system
this.nyar=new NyARGlMarkerSystem(param); //create MarkerSystem
this.ids[0]=this.nyar.addARMarker(ARCODE_FILE2,16,25,80);
this.ids[1]=this.nyar.addARMarker(ARCODE_FILE,16,25,80);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadMatrixd(this.nyar.getGlProjectionMatrix(),0);
gl.glEnable(GL.GL_DEPTH_TEST);
this.camera.start();
}
private final static String ARCODE_FILE = "../../Data/patt.hiro";
private final static String ARCODE_FILE2 = "../../Data/patt.kanji";
private int[] ids=new int[2];
public void draw(GL gl)
{
synchronized(this.camera){
try {
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // Clear the buffers for new frame.
NyARGLDrawUtil.drawBackGround(gl,this.camera.getSourceImage(), 1.0);
this.nyar.update(this.camera);
if(this.nyar.isExistMarker(this.ids[0])){
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glPushMatrix();
gl.glLoadMatrixd(this.nyar.getGlMarkerTransMat(this.ids[0]),0);
NyARGLDrawUtil.drawColorCube(gl,40);
gl.glPopMatrix();
}
if(this.nyar.isExistMarker(this.ids[1])){
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glPushMatrix();
gl.glLoadMatrixd(this.nyar.getGlMarkerTransMat(this.ids[1]),0);
NyARGLDrawUtil.drawColorCube(gl,40);
gl.glPopMatrix();
}
Thread.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
try {
new SimpleLite();
} catch (Exception e) {
e.printStackTrace();
}
return;
}
}