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.
