<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>lOOney dOOdle &#187; 3D Studio</title>
	<atom:link href="http://www.looneydoodle.com/tag/3d-studio/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.looneydoodle.com</link>
	<description>Doodles, art, life and much more...</description>
	<lastBuildDate>Sun, 05 Feb 2012 10:52:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>FLAR Manager, Multi Marker Multi Collada</title>
		<link>http://www.looneydoodle.com/2010/04/flar-manager-multi-marker-multi-collada/</link>
		<comments>http://www.looneydoodle.com/2010/04/flar-manager-multi-marker-multi-collada/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 00:13:44 +0000</pubDate>
		<dc:creator>lOOney dOOdle</dc:creator>
				<category><![CDATA[College]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[3D Studio]]></category>
		<category><![CDATA[AR Toolkit]]></category>
		<category><![CDATA[Augmented Reality]]></category>
		<category><![CDATA[FLARManager]]></category>
		<category><![CDATA[Marker]]></category>

		<guid isPermaLink="false">http://www.looneydoodle.com/?p=173</guid>
		<description><![CDATA[Marker
I ve been toying around with Augmented Reality a lot lately. I came across FLARManager which is the easiest way to implement AR. Somehow i haven&#8217;t found any code out there till now that displays multiple collada files on multiple markers. So, here is my implementation of the concept.
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 [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_182" class="wp-caption alignleft" style="width: 310px"><a href="http://www.looneydoodle.com/looneydoodle.com/wp-content/uploads/2010/04/patt001.png"><img class="size-medium wp-image-182 " title="patt001" src="http://www.looneydoodle.com/looneydoodle.com/wp-content/uploads/2010/04/patt001-300x300.png" alt="" width="300" height="300" /></a><p class="wp-caption-text">Marker</p></div>
<p>I ve been toying around with Augmented Reality a lot lately. I came across FLARManager which is the easiest way to implement AR. Somehow i haven&#8217;t found any code out there till now that displays multiple collada files on multiple markers. So, here is my implementation of the concept.</p>
<blockquote><p><code>package  {</code></p>
<p><code>import com.transmote.flar.FLARManager;</code></p>
<p><code>import com.transmote.flar.marker.FLARMarker;</p>
<p>import com.transmote.flar.marker.FLARMarkerEvent;</p>
<p></code><code>import com.transmote.flar.utils.geom.FLARPVGeomUtils;</code></p>
<p><code>import flash.display.Sprite;</code></p>
<p><code> </code><code>import flash.events.Event;</code></p>
<p><code>import org.libspark.flartoolkit.support.pv3d.FLARCamera3D;</code></p>
<p><code>import org.papervision3d.lights.PointLight3D;</code></p>
<p><code>import org.papervision3d.objects.DisplayObject3D;</code></p>
<p><code>import org.papervision3d.objects.parsers.DAE;</p>
<p>import org.papervision3d.render.LazyRenderEngine;</p>
<p>import org.papervision3d.scenes.Scene3D;</p>
<p>import org.papervision3d.view.Viewport3D;</p>
<p>public class MultiMarkerMultiDae extends Sprite {</p>
<p>private var flarManager:FLARManager;</p>
<p>private var scene3D:Scene3D;</p>
<p>private var camera3D:FLARCamera3D;</p>
<p>private var viewport3D:Viewport3D;</p>
<p>private var renderEngine:LazyRenderEngine;</p>
<p>private var pointLight3D:PointLight3D;</p>
<p>private var activeMarker1:FLARMarker;</p>
<p>private var activeMarker2:FLARMarker;</p>
<p>private var activeMarker3:FLARMarker;</p>
<p>private var activeMarker:FLARMarker;</p>
<p>private var modelContainer:DisplayObject3D;</p>
<p>private var modelContainer1:DisplayObject3D;</p>
<p>private var modelContainer3:DisplayObject3D;</p>
<p>private var markerId:int;</p>
<p>public function MultiMarkerMultiDae ()</p>
<p>{</p>
<p>// pass the path to the FLARManager xml config file into the FLARManager constructor.</p>
<p>// FLARManager creates and uses a FLARCameraSource by default.</p>
<p>// the image from the first detected camera will be used for marker detection.</p>
<p>this.flarManager = new FLARManager("flar/flarConfig.xml");</p>
<p>// add FLARManager.flarSource to the display list to display the video capture.</p>
<p>this.addChild(Sprite(this.flarManager.flarSource));</p>
<p>// begin listening for FLARMarkerEvents.</p>
<p>this.flarManager.addEventListener(FLARMarkerEvent.MARKER_ADDED, this.onMarkerAdded);</p>
<p>this.flarManager.addEventListener(FLARMarkerEvent.MARKER_UPDATED, this.onMarkerUpdated);</p>
<p>this.flarManager.addEventListener(FLARMarkerEvent.MARKER_REMOVED, this.onMarkerRemoved);</p>
<p>// wait for FLARManager to initialize before setting up Papervision3D environment.</p>
<p>this.flarManager.addEventListener(Event.INIT, this.onFlarManagerInited);</p>
<p>}</p>
<p>private function onFlarManagerInited (evt:Event) :void</p>
<p>{</p>
<p>this.flarManager.removeEventListener(Event.INIT, this.onFlarManagerInited);</p>
<p>this.scene3D = new Scene3D();</p>
<p>// initialize FLARCamera3D with parsed camera parameters.</p>
<p>this.camera3D = new FLARCamera3D(this.flarManager.cameraParams);</p>
<p>this.viewport3D = new Viewport3D(this.stage.stageWidth, this.stage.stageHeight);</p>
<p>this.addChild(this.viewport3D);</p>
<p>this.renderEngine = new LazyRenderEngine(this.scene3D, this.camera3D, this.viewport3D);</p>
<p>this.pointLight3D = new PointLight3D();</p>
<p>this.pointLight3D.x = 1000;</p>
<p>this.pointLight3D.y = 1000;</p>
<p>this.pointLight3D.z = -1000;</p>
<p>// load the model.</p>
<p>// (this model has to be scaled and rotated to fit the marker; every model is different.)</p>
<p>var model1:DAE = new DAE(true, "model1", true);</p>
<p>model1.load("assets/model4.dae");</p>
<p>model1.rotationX = 0;</p>
<p>model1.rotationY = 0;</p>
<p>model1.rotationZ = 0;</p>
<p>model1.scale = 10;</p>
<p>// load the model.</p>
<p>// (this model has to be scaled and rotated to fit the marker; every model is different.)</p>
<p>var model2:DAE = new DAE(true, "model2", true);</p>
<p>model2.load("assets/model4.dae");</p>
<p>trace("model4 loaded");</p>
<p>model2.rotationX = 0;</p>
<p>model2.rotationY=  0;</p>
<p>model2.rotationZ = 0;</p>
<p>model2.scale = 10;</p>
<p>// load the model.</p>
<p>// (this model has to be scaled and rotated to fit the marker; every model is different.)</p>
<p>var model3:DAE = new DAE(true, "model3", true);</p>
<p>model3.load("assets/model4.dae");</p>
<p>model3.rotationX = 0;</p>
<p>model3.rotationY=  0;</p>
<p>model3.rotationZ = 0;</p>
<p>model3.scale = 10;</p>
<p>//              // create a container for the model, that will accept matrix transformations.</p>
<p>// create a container for the model, that will accept matrix transformations.</p>
<p>this.modelContainer = new DisplayObject3D();</p>
<p>this.modelContainer.addChild(model1);</p>
<p>this.modelContainer.visible = false;</p>
<p>this.scene3D.addChild(this.modelContainer);</p>
<p>this.modelContainer1 = new DisplayObject3D();</p>
<p>this.modelContainer1.addChild(model2);</p>
<p>this.modelContainer1.visible = false;</p>
<p>this.scene3D.addChild(this.modelContainer1);</p>
<p>this.modelContainer3 = new DisplayObject3D();</p>
<p>this.modelContainer3.addChild(model3);</p>
<p>this.modelContainer3.visible = false;</p>
<p>this.scene3D.addChild(this.modelContainer3);</p>
<p>//------------------------------------------------------------------------- ---------</p>
<p>this.addEventListener(Event.ENTER_FRAME, this.onEnterFrame);</p>
<p>}</p>
<p>private function onMarkerAdded (evt:FLARMarkerEvent) :void</p>
<p>{</p>
<p>trace("["+evt.marker.patternId+"] added");</p>
<p>if(evt.marker.patternId == 1)</p>
<p>{</p>
<p>trace("Pattern 1 Added");</p>
<p>markerAdded(1);</p>
<p>this.activeMarker1 = evt.marker;</p>
<p>}</p>
<p>if(evt.marker.patternId == 2)</p>
<p>{</p>
<p>trace("Pattern 2 Added");</p>
<p>markerAdded(2);</p>
<p>this.activeMarker2 = evt.marker;</p>
<p>}</p>
<p>if(evt.marker.patternId == 3)</p>
<p>{</p>
<p>trace("Pattern 3 Added");</p>
<p>markerAdded(3);</p>
<p>this.activeMarker3 = evt.marker;</p>
<p>}</p>
<p>this.activeMarker = evt.marker;</p>
<p>}</p>
<p>private function onMarkerUpdated (evt:FLARMarkerEvent) :void</p>
<p>{</p>
<p>trace("["+evt.marker.patternId+"] updated");</p>
<p>if(evt.marker.patternId == 1)</p>
<p>{</p>
<p>trace("Pattern 1 Updated");</p>
<p>markerAdded(1);</p>
<p>this.activeMarker1 = evt.marker;</p>
<p>}</p>
<p>if(evt.marker.patternId == 2)</p>
<p>{</p>
<p>trace("Pattern 2 Updated");</p>
<p>markerAdded(2);</p>
<p>this.activeMarker2 = evt.marker;</p>
<p>}</p>
<p>if(evt.marker.patternId == 3)</p>
<p>{</p>
<p>trace("Pattern 3 Updated");</p>
<p>markerAdded(3);</p>
<p>this.activeMarker3 = evt.marker;</p>
<p>}</p>
<p>}</p>
<p>private function onMarkerRemoved (evt:FLARMarkerEvent) :void {</p>
<p>trace("["+evt.marker.patternId+"] removed");</p>
<p>if(evt.marker.patternId == 1)</p>
<p>{</p>
<p>trace("Pattern 1 Removed");</p>
<p>markerRemoved(1);</p>
<p>}</p>
<p>if(evt.marker.patternId == 2)</p>
<p>{</p>
<p>trace("Pattern 2 Removed");</p>
<p>markerRemoved(2);</p>
<p>}</p>
<p>if(evt.marker.patternId == 3)</p>
<p>{</p>
<p>trace("Pattern 3 Removed");</p>
<p>markerRemoved(3);</p>
<p>}</p>
<p>this.activeMarker = null;</p>
<p>this.activeMarker1 = null;</p>
<p>this.activeMarker2 = null;</p>
<p>this.activeMarker3 = null;</p>
<p>}</p>
<p>private function onEnterFrame (evt:Event) :void {</p>
<p>// apply the FLARToolkit transformation matrix to the Cube.</p>
<p>if (this.activeMarker) {</p>
<p>this.modelContainer.transform =    FLARPVGeomUtils.convertFLARMatrixToPVMatrix(this.activeMarker.transformMatrix);</p>
<p>}</p>
<p>if (this.activeMarker1) {</p>
<p>this.modelContainer.transform =    FLARPVGeomUtils.convertFLARMatrixToPVMatrix(this.activeMarker1.transformMatrix);</p>
<p>}</p>
<p>if (this.activeMarker2) {</p>
<p>this.modelContainer1.transform = FLARPVGeomUtils.convertFLARMatrixToPVMatrix(this.activeMarker2.transformMatrix);</p>
<p>}</p>
<p>if (this.activeMarker3) {</p>
<p>this.modelContainer3.transform = FLARPVGeomUtils.convertFLARMatrixToPVMatrix(this.activeMarker3.transformMatrix);</p>
<p>}</p>
<p>//            // apply the FLARToolkit transformation matrix to the Cube.</p>
<p>this.renderEngine.render();</p>
<p>}</p>
<p>//EVENTS FOR ADDED MARKER</p>
<p>private function markerAdded(markerId:int):void</p>
<p>{</p>
<p>trace(markerId);</p>
<p>var x:int = markerId;</p>
<p>switch(x)</p>
<p>{</p>
<p>case 1:</p>
<p>{</p>
<p>trace("1 Yeah");</p>
<p>if(modelContainer1.visible==false)</p>
<p>{</p>
<p>modelContainer1.visible=true;</p>
<p>break;</p>
<p>}</p>
<p>else</p>
<p>break;</p>
<p>}</p>
<p>case 2:</p>
<p>{</p>
<p>if(modelContainer.visible==false)</p>
<p>{</p>
<p>modelContainer.visible=true;</p>
<p>break;</p>
<p>}</p>
<p>else</p>
<p>break;</p>
<p>}</p>
<p>case 3:</p>
<p>{</p>
<p>trace("1 Yeah");</p>
<p>if(modelContainer3.visible==false)</p>
<p>{</p>
<p>modelContainer3.visible=true;</p>
<p>break;</p>
<p>}</p>
<p>else</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>private function markerRemoved(markerId:int):void</p>
<p>{</p>
<p>var x:int = markerId;</p>
<p>switch(x)</p>
<p>{</p>
<p>case 1:</p>
<p>{</p>
<p>if(modelContainer1.visible==true)</p>
<p>{</p>
<p>modelContainer1.visible=false;</p>
<p>break;</p>
<p>}</p>
<p>else</p>
<p>break;</p>
<p>}</p>
<p>case 2:</p>
<p>{</p>
<p>if(modelContainer.visible==true)</p>
<p>{</p>
<p>modelContainer.visible=false;</p>
<p>break;</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>case 3:</p>
<p>{</p>
<p>if(modelContainer3.visible==true)</p>
<p>{</p>
<p>modelContainer3.visible=false;</p>
<p>break;</p>
<p>}</p>
<p>else</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p></code></p>
<p><code>}</code></p>
<p>Just link back to me if you use this code. Here is the example of how the code works. Download the marker <a href="http://www.looneydoodle.com/AugmentedReality/flar/patterns/patterns01.pdf">here</a>.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.looneydoodle.com/AugmentedReality/launchMultiMarker.swf" /><embed type="application/x-shockwave-flash" width="640" height="480" src="http://www.looneydoodle.com/AugmentedReality/launchMultiMarker.swf"></embed></object></p></blockquote>
<p>If it does not load, click <a href="http://www.looneydoodle.com/AugmentedReality/launchMultiMarker.swf">here</a>.</p>
<fb:like href=http://www.looneydoodle.com/2010/04/flar-manager-multi-marker-multi-collada/ font=></fb:like>]]></content:encoded>
			<wfw:commentRss>http://www.looneydoodle.com/2010/04/flar-manager-multi-marker-multi-collada/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

