drag

LocalServiceConnection (FlashLCS) demo

Friday, March 6th, 2009 | examples | Comments

This post from John G.: http://rockonflash.wordpress.com/2009/03/05/new-localconnection-api-rocks-and-its-os/
Lead me here: http://labs.blitzagency.com/?p=650
And then here: http://code.google.com/p/flashlcs/

So I thought I’d put a little demo together of this new stuff in action. You’ll notice dragging the cube around in either swf will update the position of the cube in the other. This is mainly just a test to see it working for me before trying external panels/tools for updating content. You’ll see the little circle indicators showing if the two swfs are connected or not. I didn’t really put in any connection checking code, so if it’s not working just close the page and open it again.

Get Adobe Flash player

download top source

Get Adobe Flash player

download bottom source

Tags: ,

Dragging an object to rotate

Thursday, January 15th, 2009 | examples | Comments

The cool thing about this example is you can really just drop any DisplayObject3D in to rotate it around. It’s not super exciting, but I bet many of you will find it useful.


source

package
{
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
 
	import org.papervision3d.core.math.Matrix3D;
	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;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class Trackball extends BasicView
	{
		private static const FORWARD:Number3D = new Number3D(0, 0, 1);
 
		private var sphere:Sphere;
		private var previousMousePoint:Point = new Point();
		private var isMouseDown:Boolean = false;
 
		public function Trackball()
		{
			var light:PointLight3D = new PointLight3D();
			var flatShadeMaterial:FlatShadeMaterial = new FlatShadeMaterial(light, 0xcc0000, 0x222222);
			sphere = new Sphere(flatShadeMaterial, 500, 32, 24);
 
			scene.addChild(sphere);
			startRendering();
 
			stage.addEventListener(MouseEvent.MOUSE_DOWN, stage_mouseDownHandler);
			stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUpHandler);
		}		
 
		private function stage_mouseDownHandler(event:MouseEvent):void
		{
			isMouseDown = true;
		}
 
		private function stage_mouseUpHandler(event:MouseEvent):void
		{
			isMouseDown = false;	
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			var currentMousePoint:Point = new Point(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);
 
			if(isMouseDown)
			{
				var difference:Point = currentMousePoint.subtract(previousMousePoint);
	 			var vector:Number3D = new Number3D(difference.x, difference.y, 0);
 
				var rotationAxis:Number3D = Number3D.cross(vector, FORWARD);
				rotationAxis.normalize();
 
				var distance:Number = Point.distance(currentMousePoint, previousMousePoint);
				var rotationMatrix:Matrix3D = Matrix3D.rotationMatrix(rotationAxis.x, -rotationAxis.y, rotationAxis.z, distance/250);
 
				sphere.transform.calculateMultiply3x3(rotationMatrix, sphere.transform);
			}
 
			previousMousePoint = currentMousePoint;
 
			super.onRenderTick(event);
		}
	}
}

Tags: , ,

Dragging Planes and lookAt Camera

Friday, December 19th, 2008 | examples, requests | Comments


source

package
{
	import flash.display.BitmapData;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
 
	import org.papervision3d.core.geom.renderables.Vertex3D;
	import org.papervision3d.core.math.Number3D;
	import org.papervision3d.core.math.Plane3D;
	import org.papervision3d.core.proto.MaterialObject3D;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.view.BasicView;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class DraggingPlanes extends BasicView
	{
		private const NUM_PLANES:int = 11;
 
		private var planeToDragOn:Plane3D;
		private var currentPlane:Plane;
 
		private var light:PointLight3D;
 
		public function DraggingPlanes()
		{
			viewport.interactive = true;
 
			camera.y = 100;
 
			for(var i:int = 0; i < NUM_PLANES; i++)
			{
				var material:MaterialObject3D = createMaterial();
				material.interactive = true;
				/*
				Please note that, by default, the material on a plane
				is placed on the "back" of a plane (since the camera defaults
				to -1000 z. So if you tell the plane to "lookAt" the camera,
				you will see the front of the plane with nothing on it. You can
				solve this by making the material doubleSided
				*/
				material.doubleSided = true;
				var plane:Plane = new Plane(material, 100, 100, 4, 4);
				plane.x = (i - NUM_PLANES/2) * 200;
 
				scene.addChild(plane);
				plane.lookAt(camera);
 
				plane.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, objectPressHandler);
				stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
			}
 
			var up:Number3D = new Number3D(0, 1, 0);
			planeToDragOn = new Plane3D(up, new Number3D(0,0,0));
 
			startRendering(); 	
		}
 
		private function createMaterial():MaterialObject3D
		{
			var bitmapData:BitmapData = new BitmapData(300, 200, false, Math.random() * 0xffffff);
			var bitmapBorder:BitmapData = new BitmapData(320, 220, false, 0xffffff);
 
			bitmapBorder.copyPixels(bitmapData, bitmapData.rect, new Point(10, 10));
 
			var bitmapMaterial:BitmapMaterial = new BitmapMaterial(bitmapBorder, true);
			bitmapMaterial.smooth = true;
 
			return bitmapMaterial;
		}
 
		private function objectPressHandler(event:InteractiveScene3DEvent):void
		{
			currentPlane = event.displayObject3D as Plane;
		}
 
		private function mouseUpHandler(event:MouseEvent):void
		{
			currentPlane = null;
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			var ray:Number3D = camera.unproject(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);
			ray = Number3D.add(ray, camera.position);
 
			var cameraVertex3D:Vertex3D = new Vertex3D(camera.x, camera.y, camera.z);
			var rayVertex3D:Vertex3D = new Vertex3D(ray.x, ray.y, ray.z);
 
			var intersectPoint:Vertex3D = planeToDragOn.getIntersectionLine(cameraVertex3D, rayVertex3D);
 
			if(currentPlane)
			{
				currentPlane.x = intersectPoint.x;
				currentPlane.y = intersectPoint.y;
				currentPlane.z = intersectPoint.z;
				currentPlane.lookAt(camera);
			}
 
			renderer.renderScene(scene, camera, viewport);
		}
	}
}

Tags:

Dragging Spheres

Tuesday, December 9th, 2008 | examples | Comments


source

package
{
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	import org.papervision3d.core.geom.renderables.Vertex3D;
	import org.papervision3d.core.math.Number3D;
	import org.papervision3d.core.math.Plane3D;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.view.BasicView;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class DraggingASphere extends BasicView
	{
		private const NUM_SPHERES:int = 11;
 
		private var planeToDragOn:Plane3D;
		private var currentSphere:Sphere;
 
		private var light:PointLight3D;
 
		public function DraggingASphere()
		{
			viewport.interactive = true;
 
			camera.y = 400;
 
			light = new PointLight3D(true);
			scene.addChild(light);
 
			for(var i:int = 0; i < NUM_SPHERES; i++)
			{
				var material:FlatShadeMaterial = new FlatShadeMaterial(light, 0xeeeeee, 0x2d2d2d, 10);
				material.interactive = true;
				var sphere:Sphere = new Sphere(material);
				sphere.x = (i - NUM_SPHERES/2) * 200;
 
				scene.addChild(sphere);
 
				sphere.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, objectPressHandler);
				stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
			}
 
			var up:Number3D = new Number3D(0, 1, 0);
			planeToDragOn = new Plane3D(up, new Number3D(0,0,0));
 
			startRendering(); 	
		}
 
		private function objectPressHandler(event:InteractiveScene3DEvent):void
		{
			currentSphere = event.displayObject3D as Sphere;
		}
 
		private function mouseUpHandler(event:MouseEvent):void
		{
			currentSphere = null;
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			var ray:Number3D = camera.unproject(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);
			ray = Number3D.add(ray, camera.position);
 
			var cameraVertex3D:Vertex3D = new Vertex3D(camera.x, camera.y, camera.z);
			var rayVertex3D:Vertex3D = new Vertex3D(ray.x, ray.y, ray.z);
 
			var intersectPoint:Vertex3D = planeToDragOn.getIntersectionLine(cameraVertex3D, rayVertex3D);
 
			if(currentSphere)
			{
				currentSphere.x = intersectPoint.x;
				currentSphere.y = intersectPoint.y;
				currentSphere.z = intersectPoint.z;
			}
 
			light.x = intersectPoint.x;
			light.y = intersectPoint.y + 100;
			light.z = intersectPoint.z;
 
			renderer.renderScene(scene, camera, viewport);
		}
	}
}

Tags: , ,

Search

Recommended Books

Speaking at FITC Toronto

 

March 2010
M T W T F S S
« Jan    
1234567
891011121314
15161718192021
22232425262728
293031  

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