Fun with Pixel3D and Vertex3D

Tuesday, November 18th, 2008 | examples

I was just playing around with Pixel3D and came up with the following result.

The pixels are placed by finding each vertex of the sphere then proportionately moving from the origin (x:0, y:0, z:0) out to the vertex.

View example
source

package {
 
	import flash.events.Event;
 
	import org.papervision3d.core.geom.Pixels;
	import org.papervision3d.core.geom.renderables.Pixel3D;
	import org.papervision3d.core.geom.renderables.Vertex3D;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.view.layer.BitmapEffectLayer;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class PixelField extends BasicView
	{
		private const NUM_PIXELS:int = 200;
		private var pixels:Pixels;
		public function PixelField()
		{
			camera.y = 100;
 
			//you need a bitmapEffectLayer for the pixels
			var bitmapEffectLayer:BitmapEffectLayer = new BitmapEffectLayer(viewport);
			//this allows for the neat overdraw cylinder effect
			//bitmapEffectLayer.clearBeforeRender = true;
			pixels = new Pixels(bitmapEffectLayer);
 
			var sphere:Sphere = new Sphere(new ColorMaterial(0xffffff, 0), 500);
			scene.addChild(sphere);
			singleRender();
 
			for each(var vertex3D:Vertex3D in sphere.geometry.vertices)
			{
				for(var i:int = 0; i < NUM_PIXELS; i++)
				{
					//move the x, y, z out to the vertex3D
					//in proportion to the # of pixels
					var randX:Number = vertex3D.x *(i / NUM_PIXELS);
					var randY:Number = vertex3D.y *(i / NUM_PIXELS);
					var randZ:Number = vertex3D.z *(i / NUM_PIXELS);
 
					//Notice the color is an ARGB value, so 8 f's instead of 6
					//meaning the first FF = alpha, then red, green, blue
					var randColor:Number = Math.random() * 0xffffffff;
					var pixel:Pixel3D = new Pixel3D(randColor, randX, randY, randZ);
 
					pixels.addPixel3D(pixel);
				}
 
 
			}
			//remember to add the bitmapEffectLayer to the viewport
			viewport.containerSprite.addLayer(bitmapEffectLayer);
			scene.addChild(pixels);
 
			addEventListener(Event.ENTER_FRAME, renderAndRotateHandler);
		}
 
		private function renderAndRotateHandler(event:Event):void
		{
			pixels.yaw(1);
			singleRender();
		}
	}
}

Tags: , ,

  • Trevor

    very cool. thanks for posting!

  • Seb

    Very nice. Looks like it could be part of a cracktro on an Amiga ;)

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 ...