AR

A799252 이정익

센서를 이용해서 졸작을 하지 않기에 AR에 관련된 사항을 조사해봤습니다.

먼저 플래시 AR은 현재 FLARToolkit과 FLARManager가 가장 많이 쓰이며,

제가 참고한 것은 Eric의

(http://words.transmote.com/wp/flarmanager/)

FLARManager입니다.

AR을 이용해서 영상을 집어넣어 보겠습니다.

여기에 관한 샘플 코드는 Lee Brimelow의

http://www.gotoandlearn.com/에서 자세히

볼 수 있습니다.

AR을 사용하는 프로세스는 다음과 같습니다.

1. AR 마커 등록 -> 2. coding -> 3. 마커 출력

먼저 마커를 등록해볼까요. 마커 등록은

http://flash.tarotaro.org/blog/에서

할 수 있습니다. png 파일로 된 마커를 일단 등록합니다.

그 다음에 coding을 하는데요.  코드를 올려놓겠습니다.

package
{
import com.transmote.flar.FLARManager;
import com.transmote.flar.marker.FLARMarker;
import com.transmote.flar.marker.FLARMarkerEvent;
import com.transmote.flar.utils.geom.FLARPVGeomUtils;
import com.transmote.utils.time.FramerateDisplay;

import flash.display.Sprite;
import flash.display.StageDisplayState;
import flash.events.Event;

import org.libspark.flartoolkit.support.pv3d.FLARCamera3D;
import org.papervision3d.materials.MovieMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.render.LazyRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;

[SWF(width=’640′, height=’480′, backgroundColor=’#000000′, frameRate=’40’)]
public class Royal extends Sprite
{
private var fm : FLARManager;
private var scene : Scene3D;
private var viewport : Viewport3D;
private var camera : FLARCamera3D;
private var lre : LazyRenderEngine;
private var plane : Plane;
private var marker : FLARMarker;
private var v : Vid;
private var mat : MovieMaterial;
private var container : DisplayObject3D;

public function Royal()
{
initFlar();
v = new Vid();
v.vid.source = “Sequence_01.flv”;
v.vid.stop();

}
private function initFlar () : void
{
fm = new FLARManager(“flarConfig.xml”);
fm.addEventListener( FLARMarkerEvent.MARKER_ADDED, onAdded );
fm.addEventListener( FLARMarkerEvent.MARKER_REMOVED, onRemoved );
fm.addEventListener( Event.INIT, onFlarLoad );
addChild( Sprite(fm.flarSource));
}
private function onFlarLoad ( e: Event ) : void
{
fm.removeEventListener( Event.INIT, onFlarLoad );
init3D();

}
private function onAdded ( e: FLARMarkerEvent ) : void
{
marker = e.marker;
v.vid.play();
plane.visible = true;
}
private function onRemoved ( e: FLARMarkerEvent ) : void
{
marker = null;
v.vid.stop();
plane.visible = false;
}

private function init3D () : void
{
scene = new Scene3D();
camera = new FLARCamera3D(fm.cameraParams );
camera.z = -30;

viewport = new Viewport3D( 640, 480, true );
lre = new LazyRenderEngine( scene, camera, viewport );
container = new DisplayObject3D();
var mat : MovieMaterial = new MovieMaterial( v, false, true );
mat.smooth = true;
plane = new Plane( mat, 320, 240, 2, 2 );

plane.scaleY = -1;
plane.rotationZ = 90;
addChild( viewport );
container.addChild( plane );
plane.visible = false;
scene.addChild( container );
//this.addChild( viewport );
addEventListener( Event.ENTER_FRAME, onEnter );
addChild(new FramerateDisplay());
}

private function onEnter ( e: Event ) : void
{

lre.render();
if ( marker != null )
{
container.transform = FLARPVGeomUtils.convertFLARMatrixToPVMatrix( marker.transformMatrix );
}
}
}
}

그 다음에는 마커를 출력해서 AR을 즐기시면 됩니다.

Advertisements

One Response to “AR”

  1. dmd10 Says:

    작년에 센서리포트과제로 한 조현철과 이은택군의 AR에 관한 포스트를 참조하세요.
    http://dmd09.wordpress.com/2009/04/06/tech-report-조현철-이은택/

    김영희

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중


%d 블로거가 이것을 좋아합니다: