Dancing Spheres

Wednesday, November 26th, 2008 | examples

This was supposed to be something completely different :)




source

package
{
	import flash.events.Event;
 
	import org.papervision3d.core.effects.BitmapColorEffect;
	import org.papervision3d.core.math.Number3D;
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.view.layer.BitmapEffectLayer;
	import org.papervision3d.view.layer.ViewportLayer;
 
	[SWF(width="800", height="600", backgroundColor="#000000", frameRate="60")]
	public class DancingSpheres extends BasicView
	{
		private const LENGTH:Number = 2000;
		private var yellowSphere:Sphere;
 
 
		public function DancingSpheres()
		{
			super(800, 600);			
			camera.fov = 140;
 
			var light:PointLight3D = new PointLight3D();
			light.x = -1000, light.y = 1000;
 
			var yellowMaterial:FlatShadeMaterial = new FlatShadeMaterial(light, 0xcccc00);
			yellowSphere = new Sphere(yellowMaterial, 120);
 
			var redMaterial:FlatShadeMaterial = new FlatShadeMaterial(light, 0xcc0000);
			var redSphere:Sphere = new Sphere(redMaterial, 120);
			redSphere.x = -400;
 
			yellowSphere.addChild(redSphere);
 
			var bitmapEffectLayer:BitmapEffectLayer = new BitmapEffectLayer(viewport, 800, 600);
			bitmapEffectLayer.addDisplayObject3D(yellowSphere);
			bitmapEffectLayer.addDisplayObject3D(redSphere);
			bitmapEffectLayer.addEffect(new BitmapColorEffect());
			viewport.containerSprite.addLayer(bitmapEffectLayer);
 
			scene.addChild(yellowSphere);
 
			startRendering();
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			var ray:Number3D = camera.unproject(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);
			ray.normalize();
			ray.multiplyEq(LENGTH);
			ray = Number3D.add(ray, new Number3D(camera.x, camera.y, camera.z));
 
			var velocityX:Number = (ray.x - yellowSphere.x) * .1; 
			var velocityY:Number = (ray.y - yellowSphere.y) * .1; 
			var velocityZ:Number = (ray.z - yellowSphere.z) * .1; 
 
			yellowSphere.x += velocityX;
			yellowSphere.y += velocityY;
			yellowSphere.z += velocityZ;
 
			if(velocityX > 20) velocityX = 20;
			if(velocityX < -20) velocityX = -20;
 
			yellowSphere.roll(velocityX);
 
			renderer.renderScene(scene, camera, viewport);
		}
	}
}

Tags:

blog comments powered by Disqus

Search

Recommended Books

Speaking at FITC Toronto

 

November 2008
M T W T F S S
    Dec »
 12
3456789
10111213141516
17181920212223
24252627282930

Preferred Video Tutorial Resolution

  • 1024x768 (53%, 85 Votes)
  • 1280x1024 (15%, 24 Votes)
  • 1920x1080 (15%, 24 Votes)
  • 800x600 (13%, 20 Votes)
  • 480x320 (4%, 6 Votes)
  • 640x480 (0%, 2 Votes)

Total Voters: 160

Loading ... Loading ...