Pixel3D
Flint Pixels
package { import flash.events.Event; import flash.filters.BlurFilter; import org.flintparticles.common.actions.Age; import org.flintparticles.common.counters.Steady; import org.flintparticles.common.initializers.ColorInit; import org.flintparticles.common.initializers.Lifetime; import org.flintparticles.threeD.actions.Accelerate; import org.flintparticles.threeD.actions.Move; import org.flintparticles.threeD.emitters.Emitter3D; import org.flintparticles.threeD.geom.Vector3D; import org.flintparticles.threeD.initializers.Velocity; import org.flintparticles.threeD.papervision3d.PV3DPixelRenderer; import org.flintparticles.threeD.zones.DiscZone; import org.papervision3d.core.effects.BitmapLayerEffect; import org.papervision3d.core.geom.Pixels; import org.papervision3d.view.BasicView; import org.papervision3d.view.layer.BitmapEffectLayer; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class FlintPixels extends BasicView { private var emitter:Emitter3D; private var flintRenderer:PV3DPixelRenderer; private var bitmapEffectLayer:BitmapEffectLayer; private var pixels:Pixels; public function FlintPixels() { camera.z = -300; setupPixels(); setupEmitter(); setupFlintRenderer(); emitter.start(); startRendering(); } private function setupPixels():void { bitmapEffectLayer = new BitmapEffectLayer(viewport); viewport.containerSprite.addLayer( bitmapEffectLayer ); pixels = new Pixels(bitmapEffectLayer); bitmapEffectLayer.addDisplayObject3D(pixels); scene.addChild(pixels); bitmapEffectLayer.addEffect(new BitmapLayerEffect(new BlurFilter(2, 2, 1))); } private function setupEmitter():void { emitter = new Emitter3D(); emitter.counter = new Steady( 500 ); emitter.addInitializer(new ColorInit(0xffcc0000, 0xffffffff)); emitter.addInitializer(new Velocity(new DiscZone(new Vector3D(0, 340, 0), new Vector3D(0, 1, 0), 100, 100))); emitter.addInitializer(new Lifetime(3)); emitter.addAction(new Move()); emitter.addAction(new Accelerate(new Vector3D(0, -300, 0))); emitter.addAction(new Age()); } private function setupFlintRenderer():void { flintRenderer = new PV3DPixelRenderer(pixels); flintRenderer.addEmitter(emitter); } override protected function onRenderTick(event:Event = null):void { pixels.rotationY += (viewport.containerSprite.mouseX - pixels.rotationY) * .3; pixels.rotationX += (viewport.containerSprite.mouseY - pixels.rotationX) * .3; renderer.renderScene(scene, camera, viewport); } } }
Fun with Pixel3D and Vertex3D
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.
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(); } } }
Search
Recommended Books
Speaking at FITC Toronto
Recent Posts
- Moving to johnlindquist.com
- AsyncCommand with Robotlegs, Signals, Flight, MinimalComps
- Search Widget – Robotlegs, Signals, Flight, Minimal Comps, Yahoo Astra
- FDT Super Awesome March Deal
- FDT Theme Designer
- haXe Tutorial
- AS3 Signals Tutorial
- Preferred Video Tutorial Resolution?
- TweenMax – Tweening a timeline (Advanced Tweening)
- Robotlegs + Flight + Union Platform
- Back in the saddle
- Eclipse Theme Designer Preview
- RobotLegs Hello World Video Tutorial
- 10 Things Every Senior Flash Developer Should Know
- Efflex – 3D Effects for Flex
Recent Comments
- شقق للبيع في الاردن on Moving to johnlindquist.com
- Annakhan006 on Augmented Reality – Recursive Webcam
- Yarout on Augmented Reality – Recursive Webcam
- Vivon on about
- Josh @ Wall Stickers on Moving to johnlindquist.com
- list of lpn courses on SpringCamera3D and Driving a Car
- rn to bsn in montgomery al on archive
- PowerPoint Recovery on Eclipse Theme Designer Preview
- cheat mw3 on Test if a plane is within the view of the camera (aka testing if culled)
- Goa Hotels on Looking around the inside of a Sphere
Categories
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « May | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | |||
Archives
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

