pv3d ShadedMaterial example

by milkmidi
♥0 | Line 63 | Modified 2009-12-16 11:27:31 | MIT License
play

ActionScript3 source code

/**
 * Copyright milkmidi ( http://wonderfl.net/user/milkmidi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/juPk
 */

/**
 * @author milkmidi
 * @see http://milkmidi.blogspot.com
 * @version 1.0.0
 * @date created 2009/12/16/
 */
package {
	import flash.display.*;	
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.system.LoaderContext;
	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.view.BasicView;
	
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Sphere;	
	
	import org.papervision3d.materials.shaders.*;	
	[SWF(width = "465", height = "465", frameRate = "47", backgroundColor = "#777777")]
	
	public class Materials_Shaders extends BasicView {			
		
		private var light		:PointLight3D;		
		private var rootNode	:DisplayObject3D;		
		
		public function Materials_Shaders() {
			super(0, 0, true, true);
			camera.z = -1000;			
			
			
			
			var _ldr:Loader = new Loader();
			_ldr.load(new URLRequest("http://assets.wonderfl.net/images/related_images/e/e1/e18c/e18ca4ebe44ad3c5aa082cbd2742c8581cafcf86"),new LoaderContext(true ));
			_ldr.contentLoaderInfo.addEventListener(Event.COMPLETE , init3DObject);
		}

		private function init3DObject(e:Event):void {					
			startRendering();
			var bmp:BitmapData = Bitmap(e.currentTarget.loader.content).bitmapData;
			
			
			light = new PointLight3D(true, true);			
			rootNode = new DisplayObject3D();
			scene.addChild(rootNode);
		
			var sphere:Sphere;
			var matArray:Array = new Array();
			

			var bitmapMat:BitmapMaterial = new BitmapMaterial(bmp, true);
			
			////////////
			var shadeMat		:ShadedMaterial; 
			
			var phongShader		:PhongShader = new PhongShader(light, 0xFFFFFF, 0, 0, null);			
			shadeMat			 = new ShadedMaterial(bitmapMat, phongShader);
			matArray.push(shadeMat);			
			
			var cellShader		:CellShader = new CellShader(light);			
			shadeMat			= new ShadedMaterial(bitmapMat, cellShader);
			matArray.push(shadeMat);
			
			var flatShader		:FlatShader	= new FlatShader(light);
			shadeMat			= new ShadedMaterial(bitmapMat, flatShader);
			matArray.push(shadeMat);
			
			var gouraudShader	:GouraudShader = new GouraudShader(light);
			shadeMat			= new ShadedMaterial(bitmapMat, gouraudShader);
			matArray.push(shadeMat);
			
			var lightShader		:LightShader = new LightShader();
			shadeMat			= new ShadedMaterial(bitmapMat, lightShader);
			matArray.push(shadeMat);
			
			
			var offsetX:int = 200;
			for (var i:int = 0; i < matArray.length; i++) {
				sphere = new Sphere(matArray[i], offsetX/2, 16, 16);
				sphere.x = offsetX * i - (matArray.length / 2 * offsetX);
				sphere.y = Math.random( ) * 200 - 100;
				rootNode.addChild(sphere);
			}
			
		}
		override protected function onRenderTick(event:Event = null):void {
			super.onRenderTick(event);		
			rootNode.rotationY += .5;
			light.x = -(stage.stageWidth/ 2 - this.mouseX) * 10;
			light.y = (stage.stageHeight / 2 - this.mouseY) * 10;
		}
		

	}
}