AR(Augmented Reality) / 프로세싱

http://www.creativeapplications.net/processing/augmented-reality-with-processing-tutorial-processing/

 

AR 예제(flash)

http://flash.tarotaro.org/ar/FLARMMD_http.swf

http://ge.ecomagination.com/smartgrid/#/augmented_reality

 

필요한 것들

AR라이브러리: nyar4psg (다운로드)

AR마커 (프린트)

AR패턴 파일( *.patt 파일)

 

nyar4psg 라이브러리 다운로드

http://sourceforge.jp/projects/nyartoolkit/releases/?package_id=8920

다운로드 사이트에서 최신 버전(1.2.0)을 다운로드한 후 프로세싱 라이브러리 폴더에 넣는다. (내 문서 / Processing / libraries 폴더)

 

 

예제 파일 다운로드

ARexample1

예제 파일을 다운로드한 후 폴더 안에 있는 pdf파일을 종이에 프린트한다.

 

AR패턴 다운로드

ar_marker

pattern_files폴더 안에 있는 .patt파일을 data폴더에 넣는다.

.patt파일은 각각의 AR마커를 인식하게 하는 패턴 파일로, AR마커와 패턴 파일은 한쌍으로 사용한다. 예를 들어 아래 마커(4x4_384_1.gif)를 사용하려면 4x4_1.patt파일을 data폴더에 넣어야 한다.

 

AR마커 만들기

http://flash.tarotaro.org/blog/2008/12/14/artoolkit-marker-generator-online-released/

AR마커를 만들고 싶은 경우에는 일러스트레이터에서 패턴을 만들고 위 사이트에서 웹캠으로 .patt파일을 만든다. AR패턴은 반드시 흰 여백과 검은 테두리가 있어야하고 그 안에 비대칭 패턴이 있어야 한다.

주의: nyar4psg라이브러리는 기본적으로 16×16 패턴을 지원한다. 해상도(Marker Segments)는 16×16으로 설정하여 저장한다. 만약 다른 해상도(32×32, 64×64 등)로 설정해서 저장할 경우에는 프로세싱에서 이를 반영하여 설정한다.

예를 들어 해상도가 32×32인 marker32.pat라는 패턴파일을 불러올 경우, 파일이름 다음에 패턴의 해상도를 아래와 같이 32로 지정한다.

nya.addARMarker("marker32.pat", 32, 80);

 

 

 

import codeanticode.gsvideo.*;
import jp.nyatla.nyar4psg.*;

GSCapture cam;
MultiMarker nya;

void setup() {
  size(640,480,P3D);
  colorMode(RGB, 100);
  cam=new GSCapture(this,640,480);
  cam.start();
  nya=new MultiMarker(this,width,height,"camera_para.dat",NyAR4PsgConfig.CONFIG_PSG);
  nya.addARMarker("patt.hiro",80);  // id=0
}

void draw()
{
  if (cam.available() !=true) {
      return;
  }
  cam.read();
  nya.detect(cam);
  background(0);
  image(cam, 0,0);    

  if((!nya.isExistMarker(0))){
    return;
  }

  nya.beginTransform(0);
  noFill();
  strokeWeight(3);
  stroke(100,0,0);
  rect(-40,-40,80,80);
  nya.endTransform();
}

 

여러 개의 마커

import codeanticode.gsvideo.*;
import jp.nyatla.nyar4psg.*;

GSCapture cam;
MultiMarker nya;

void setup() {
  size(640, 480, P3D);
  println(MultiMarker.VERSION);
  cam=new GSCapture(this, 640, 480);
  cam.start();
  nya=new MultiMarker(this, width, height, "camera_para.dat", NyAR4PsgConfig.CONFIG_PSG);
  nya.addARMarker("*.patt", 80);//id=0
  nya.addARMarker("*.patt", 80);//id=1
}

void draw()
{
  if (cam.available() !=true) {
    return;
  }
  cam.read();
  nya.detect(cam);
  background(0);
  image(cam, 0, 0);

  if ((nya.isExistMarker(0))) {
    nya.beginTransform(0);
    fill(0, 255, 200);
    translate(0, 0, 20);
    box(40);
    nya.endTransform();
  }
  if ((nya.isExistMarker(1))) {
    nya.beginTransform(1);
    fill(255, 255, 100);
    translate(0, 0, 20);
    box(40);
    nya.endTransform();
  }
}

Leave a Reply

You must be logged in to post a comment.