Some more Away3D :)
I have just spent the last hour or so playing with Away3d (again :)), and have just made this among other things. It is a sort of implementation of a particle system, but as I am still fairly rough around the edges with Away3D, its probably not the best.
- For a start, I am a bit confused with the maths side of things. For example getting the most out of the view-ports and how to get the cameras in the right position. So this caused me that problem of all the dots being in the bottom left right corner. :(
- When you go close up to the dots, some of them seem stretched.
- Any ideas?
Here’s a snap shot:
And the code:
package { import away3d.cameras.HoverCamera3D; import away3d.containers.Scene3D; import away3d.containers.View3D; import away3d.primitives.Sphere; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class ThreeDParticle extends Sprite { public var cam:HoverCamera3D = new HoverCamera3D; public var scene:Scene3D = new Scene3D; public var view:View3D = new View3D( { x:550, y:400, scene:scene, camera:cam } ); public var numOfDots:Number = 50; public var sphere:Sphere; public var cameraSpeed:Number = 0.3; // Approximately same speed as mouse movement. public var lastPanAngle:Number; public var lastTiltAngle:Number; public var lastMouseX:Number; public var lastMouseY:Number; public var move:Boolean; public function ThreeDParticle():void { // This is added so you can include this SWF in another. this.addEventListener(Event.ADDED_TO_STAGE, Init); } private function Init(evt:Event):void { addChild(view); cam.zoom = 1; cam.x = 0; cam.y = 0; for (var i:uint = 0; i <= numOfDots; i++) { sphere = new Sphere( { material:"black#red", radius:20, x:Math.random() * 1000, y:Math.random() * 1000, z:Math.random() * 100, segmentsH:10, segmentsW:10 } ); view.scene.addChild(sphere); } this.addEventListener(Event.ENTER_FRAME, enterFrame); this.stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); this.stage.addEventListener(MouseEvent.MOUSE_UP, mouseLeave); view.render(); } private function enterFrame(evt:Event):void { if (move) { cam.targetpanangle = cameraSpeed * (this.stage.mouseX - lastMouseX) + lastPanAngle; cam.targettiltangle = cameraSpeed * (this.stage.mouseY - lastMouseY) + lastTiltAngle; } cam.hover(); view.render(); } private function mouseDown(evt:MouseEvent):void { move = true; lastPanAngle = cam.targetpanangle; lastTiltAngle = cam.targettiltangle; lastMouseX = stage.mouseX; lastMouseY = stage.mouseY; cam.hover(); view.render(); } private function mouseLeave(evt:MouseEvent):void { move = false; } } }
And here’s the link to download it all: http://harry-northover-code-store.googlecode.com/files/3D%20Particle.zip
Right there you go for tonight!
Harry.
