math

Distance between two Number3Ds

Sunday, November 30th, 2008 | snippets | Comments
var n1:Number3D = new Number3D(500, 0, 0);
var n2:Number3D = new Number3D(0, 0, 500);
var distance:Number = Number3D.sub(n1, n2).modulo;

Tags:

Using Slerp to move around a Sphere

Saturday, November 29th, 2008 | examples, requests | Comments


source

package
{
	import flash.events.Event;
 
	import org.papervision3d.core.math.Quaternion;
	import org.papervision3d.core.utils.Mouse3D;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.view.layer.ViewportLayer;
	import org.papervision3d.view.layer.util.ViewportLayerSortMode;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class SlerpExample extends BasicView
	{
		private const RADIUS:Number = 400;
 
		private var planeQuat:Quaternion = new Quaternion();
		private var mouseQuat:Quaternion = new Quaternion();
		private var slerpQuat:Quaternion = new Quaternion();
		private var plane:Plane;
		private var sphere:Sphere;
		private var mouse3D:Mouse3D;
 
		private var slerp:Number = 0;
 
		public function SlerpExample() 
		{
			viewport.interactive = true;
			Mouse3D.enabled = true;
			mouse3D = viewport.interactiveSceneManager.mouse3D;
 
			var light:PointLight3D = new PointLight3D();
			var material:FlatShadeMaterial = new FlatShadeMaterial(light, 0xffffff);
			material.interactive = true;
			plane = new Plane(new ColorMaterial(0xcc0000), 50, 50);
 
			plane.z = -RADIUS;
 
			viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT;
			var planeViewportLayer:ViewportLayer = new ViewportLayer(viewport, plane);
			planeViewportLayer.layerIndex = 1;
			viewport.containerSprite.addLayer(planeViewportLayer);
 
			sphere = new Sphere(material, RADIUS, 30, 30);		
			sphere.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, objectClickHandler);
 
			scene.addChild(sphere);
			scene.addChild(plane);
 
			startRendering();
		}
 
		private function resetQuats():void
		{
			slerp = 0;
			planeQuat = Quaternion.createFromMatrix(plane.transform);
			mouseQuat = Quaternion.createFromMatrix(mouse3D.transform);
		}
 
		private function objectClickHandler(event:InteractiveScene3DEvent):void
		{
			resetQuats();
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			slerp += (1 - slerp) * .1;
			slerpQuat = Quaternion.slerp(planeQuat, mouseQuat, slerp);
 
			plane.transform = slerpQuat.matrix;
			plane.moveBackward(RADIUS);
 
			renderer.renderScene(scene, camera, viewport);
		}
 
	}
}

Tags: , ,

Distance to Mouse using a dummy 3d object

Saturday, November 29th, 2008 | snippets | Comments
package
{
	import flash.events.Event;
 
	import org.papervision3d.core.math.Number3D;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.view.BasicView;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class DistanceFrom3DMouse extends BasicView
	{
		private var sphere:Sphere = new Sphere();
		private var mouseDO3D:DisplayObject3D = new Sphere();
 
		public function DistanceFrom3DMouse ()
		{
			sphere.x = -500;
			sphere.y = 200;
 
//			scene.addChild(mouseDO3D); uncomment to see mouse sphere
			scene.addChild(sphere);
 
			startRendering();
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			var ray:Number3D = camera.unproject(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);
			ray.normalize();
			ray.multiplyEq(sphere.distanceTo(camera));
			ray = Number3D.add(ray, camera.position);
 
			mouseDO3D.position = ray;
 
			var distance:Number = sphere.distanceTo(mouseDO3D);
 
			renderer.renderScene(scene, camera, viewport);
		}
	}
}

I’m open to suggestions for a better way to do this :)

Tags: ,

Distance from Mouse using screen coordinates

Saturday, November 29th, 2008 | snippets | Comments
package
{
	import flash.events.Event;
 
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.view.BasicView;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class DistanceFrom2DMouse extends BasicView
	{
		private var sphere:Sphere = new Sphere();
 
		public function DistanceFrom2DMouse() 
		{
			sphere.x = -500;
			sphere.y = -300;
 
			sphere.autoCalcScreenCoords = true;
			scene.addChild(sphere);	
 
			startRendering();
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			var distanceX:Number = viewport.containerSprite.mouseX - sphere.screen.x;
			var distanceY:Number = viewport.containerSprite.mouseY - sphere.screen.y;
			var distance:Number = Math.sqrt(distanceX * distanceX + distanceY * distanceY);
 
			renderer.renderScene(scene, camera, viewport);
		}
	}
}

Tags: ,

Search

Recommended Books

Speaking at FITC Toronto

 

May 2012
M T W T F S S
« May    
 123456
78910111213
14151617181920
21222324252627
28293031  

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