<?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>masputih &#187; 3D</title>
	<atom:link href="http://masputih.com/category/3d/feed" rel="self" type="application/rss+xml" />
	<link>http://masputih.com</link>
	<description>Coder for Hire</description>
	<lastBuildDate>Tue, 10 Jan 2012 14:00:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Manipulasi Tekstur Collada (DAE)</title>
		<link>http://masputih.com/2009/08/manipulasi-tekstur-collada-dae</link>
		<comments>http://masputih.com/2009/08/manipulasi-tekstur-collada-dae#comments</comments>
		<pubDate>Mon, 10 Aug 2009 18:31:09 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[actionscript]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=530</guid>
		<description><![CDATA[Berikut ini demo manipulasi tekstur Collada (DAE) secara dinamis pada saat runtime. DAE &#38; texture files are courtesy of Away3D team. package { import away3d.animators.SkinAnimation; import away3d.cameras.Camera3D; import away3d.containers.ObjectContainer3D; import away3d.containers.Scene3D; import away3d.containers.View3D; import away3d.core.base.Mesh; import away3d.core.base.Object3D; import away3d.core.math.Number3D; import away3d.core.utils.Cast; import away3d.loaders.Collada; import away3d.materials.BitmapMaterial; import away3d.materials.TransformBitmapMaterial; import away3d.primitives.Cube; import away3d.primitives.Plane; import br.com.stimuli.loading.BulkLoader; import br.com.stimuli.loading.BulkProgressEvent; [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Berikut ini demo manipulasi tekstur Collada (DAE) secara dinamis pada saat runtime.</p>
<div id="attachment_532" class="wp-caption aligncenter" style="width: 360px">
	<a href="http://labs.masputih.com/away3d/dae-mat/index.html"><img src="http://masputih.com/uploads/2009/08/dae-mat-demo.jpg" alt="Click to launch" title="dae-mat-demo" width="360" height="360" class="size-full wp-image-532" /></a>
	<p class="wp-caption-text">Click to launch</p>
</div>
<blockquote><p>DAE &amp; texture files are courtesy of Away3D team.</p></blockquote>
<p><span id="more-530"></span></p>
<pre class="brush:as3">package
{
	import away3d.animators.SkinAnimation;
	import away3d.cameras.Camera3D;
	import away3d.containers.ObjectContainer3D;
	import away3d.containers.Scene3D;
	import away3d.containers.View3D;
	import away3d.core.base.Mesh;
	import away3d.core.base.Object3D;
	import away3d.core.math.Number3D;
	import away3d.core.utils.Cast;
	import away3d.loaders.Collada;
	import away3d.materials.BitmapMaterial;
	import away3d.materials.TransformBitmapMaterial;
	import away3d.primitives.Cube;
	import away3d.primitives.Plane;
	import br.com.stimuli.loading.BulkLoader;
	import br.com.stimuli.loading.BulkProgressEvent;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.utils.getTimer;

	public class Main extends Sprite{

		public var daeFile:String = "mario_testrun.dae";
		public var daeTexture:String = "assets/mario_tex.jpg";
		public var floorTexture:String = "assets/floor.jpg";

		public var cam:Camera3D;
		public var scene:Scene3D;
		public var view:View3D;
		public var collada:Collada;
		public var model:ObjectContainer3D;
		public var skinAnim:SkinAnimation;
		public var mesh:Mesh;

		public var floor:Plane;

		//material variables
		public var colladaMaterial:BitmapMaterial;
		public var floorMaterial:TransformBitmapMaterial;

		//drawing pane
		public var materialSprite:Sprite;

		public var ldr:BulkLoader;

		public var loadStatus:TextField;

		public function Main() {

			loadStatus = new TextField();
			loadStatus.textColor = 0xFFFFFF;
			loadStatus.autoSize = TextFieldAutoSize.RIGHT;
			addChild(loadStatus);

			if (stage) loadAssets();
			else addEventListener(Event.ADDED_TO_STAGE, loadAssets);
		}

//----------------------------------------------------------- LOAD STUFF	

		private function loadAssets(e:Event = null):void {

			removeEventListener(Event.ADDED_TO_STAGE, loadAssets);

			ldr = new BulkLoader('assets');

			ldr.logLevel = BulkLoader.LOG_INFO;

			ldr.add(daeTexture, { id:"texture", type:BulkLoader.TYPE_IMAGE } );
			ldr.add(floorTexture, { id:"floor", type:BulkLoader.TYPE_IMAGE } );
			ldr.add(daeFile, { id:"dae", type:BulkLoader.TYPE_XML } );

			ldr.addEventListener(BulkProgressEvent.PROGRESS, handleBulkLoaderEvents);
			ldr.addEventListener(BulkProgressEvent.COMPLETE, handleBulkLoaderEvents);

			ldr.start(1);
		}

		private function handleBulkLoaderEvents(e:BulkProgressEvent):void {
			if (e.type == BulkProgressEvent.PROGRESS) {

				loadStatus.text = "loading ..." + (BulkLoader.truncateNumber(e.percentLoaded,2) * 100) +"%";

				return;
			}
			if (e.type == BulkProgressEvent.COMPLETE) {

				loadStatus.x = 200;
				loadStatus.text = "<<< draw lines with your mouse here";

				initEngine();

				initFloor(ldr.getBitmap("floor"));

				initObjects(ldr.getXML("dae"), ldr.getBitmap("texture"));

			}

		}

//----------------------------------------------------------- INIT

		private function initEngine():void {

			scene = new Scene3D();

			cam = new Camera3D();
			cam.lookAt(new Number3D(0, 0, 0));
			cam.moveUp(100);
			cam.moveBackward(400);

			view = new View3D();
			view.x = stage.stageWidth / 2;
			view.y = stage.stageHeight / 2;
			view.camera = cam;
			view.scene = scene;
			view.mouseZeroMove = true;
			addChild(view);

		}

		private function initFloor(material:Bitmap):void {

			floorMaterial = new TransformBitmapMaterial(material.bitmapData);
			floorMaterial.repeat = true;

			floor = new Plane();
			floor.width = 400;
			floor.height = 400;
			floor.material = floorMaterial;

			scene.addChild(floor);
		}

		private function initObjects(dae:XML,material:Bitmap):void {

			colladaMaterial = new BitmapMaterial(material.bitmapData);

			collada = new Collada();
			collada.scaling = 10;

			/**
			 * [1] If you do this, you can't assign a new material later on. Dunno why.
			 *
			 *   collada.material = colladaMaterial;
			 *
			 * Do [2] instead.
			 */

			model = collada.parse(dae) as ObjectContainer3D;

			//[2]
			Mesh(model.getChildByName('polySurface1')).material = colladaMaterial;

			scene.addChild(model);

			skinAnim = model.animationLibrary.getAnimation("default").animation as SkinAnimation;

			addEventListener(Event.ENTER_FRAME, render);

			initDrawingPane(material);
		}

//----------------------------------------------------------- DRAWING PANE		

		private function initDrawingPane(material:Bitmap):void {

			materialSprite = new Sprite();
			materialSprite.addChild(new Bitmap(material.bitmapData));
			materialSprite.scaleX = materialSprite.scaleY = .2;
			addChild(materialSprite);

			var drawingLayer:Sprite = new Sprite();
			drawingLayer.name = "drawingLayer";
			materialSprite.addChild(drawingLayer);

			materialSprite.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
		}

		private function onMouseDown(e:MouseEvent):void {

			var drawingLayer:Sprite = materialSprite.getChildByName('drawingLayer') as Sprite;
			drawingLayer.graphics.lineStyle(1, 0xFFFFFF);
			drawingLayer.graphics.moveTo(e.localX, e.localY);
			materialSprite.addEventListener(MouseEvent.MOUSE_MOVE, drawLine);
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
		}

		private function drawLine(e:MouseEvent):void {
			var drawingLayer:Sprite = materialSprite.getChildByName('drawingLayer') as Sprite;
			drawingLayer.graphics.lineTo(e.localX, e.localY);
		}

		private function onMouseUp(e:MouseEvent):void {
			if (materialSprite.hasEventListener(MouseEvent.MOUSE_MOVE)){
				materialSprite.removeEventListener(MouseEvent.MOUSE_MOVE, drawLine);

				var bd:BitmapData = new BitmapData(materialSprite.width, materialSprite.height);
				var mat:Matrix = new Matrix(materialSprite.scaleX, 0, 0, materialSprite.scaleY);
				bd.draw(materialSprite,mat);

				//This won't work if you assign the material to the collada instance like [1]
				Mesh(model.getChildByName('polySurface1')).material = new BitmapMaterial(bd);

			}
		}

//----------------------------------------------------------- RENDER

		private function render(e:Event):void {
			model.rotationY += 10;
			//update the collada animation
			skinAnim.update(getTimer() * 2 / 1000);
			view.render();
		}
	}
}</pre>
<div class="box dl_box">Download source : <a href="http://masputih.com/wordpress/wp-content/plugins/download-monitor/download.php?id=dae-mat.rar" title="Downloaded 1602 times">→ dae-mat.rar</a></div>
]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/08/manipulasi-tekstur-collada-dae/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Situs Eminem &amp; Away3D</title>
		<link>http://masputih.com/2009/05/situs-eminem-away3d</link>
		<comments>http://masputih.com/2009/05/situs-eminem-away3d#comments</comments>
		<pubDate>Sun, 10 May 2009 04:27:58 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Away3D]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=452</guid>
		<description><![CDATA[Situs untuk album Eminem “The Relapse” dibuat dengan Away3D ( versi Flash 10 ). Kata developernya, Ian Stokes, situs ini dikerjakan selama 3 minggu bersama satu orang desainer. Silakan liat sendiri: The Relapse]]></description>
			<content:encoded><![CDATA[<p></p><p>Situs untuk album Eminem “The Relapse” dibuat dengan Away3D ( versi Flash 10 ). Kata developernya, <a href="http://www.munchiegames.com">Ian Stokes</a>, situs ini dikerjakan selama 3 minggu bersama satu orang desainer. </p>
<p><a href="http://masputih.com/uploads/2009/05/relapse-1.jpg" rel="attachment wp-att-453"><img src="http://masputih.com/uploads/2009/05/relapse-1-300x149.jpg" alt="relapse-1" title="relapse-1" width="300" height="149" class="aligncenter size-medium wp-image-453" /></a></p>
<p><a href="http://masputih.com/uploads/2009/05/relapse-2.jpg" rel="attachment wp-att-454"><img src="http://masputih.com/uploads/2009/05/relapse-2-300x149.jpg" alt="relapse-2" title="relapse-2" width="300" height="149" class="aligncenter size-medium wp-image-454" /></a></p>
<p><a href="http://masputih.com/uploads/2009/05/relapse-3.jpg" rel="attachment wp-att-455"><img src="http://masputih.com/uploads/2009/05/relapse-3-300x146.jpg" alt="relapse-3" title="relapse-3" width="300" height="146" class="aligncenter size-medium wp-image-455" /></a></p>
<p>Silakan liat sendiri: <a href="http://www.therelapse.com">The Relapse</a></p>
]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/05/situs-eminem-away3d/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

