In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

pv3d.org example

testing examples from pv3d.org
Get Adobe Flash player
by h_jayesh 17 Jun 2009
// testing examples from pv3d.org

package
{
	import flash.events.Event;
 
	import org.papervision3d.core.math.Matrix3D;
	import org.papervision3d.core.math.Number3D;
	import org.papervision3d.core.proto.LightObject3D;
	import org.papervision3d.core.proto.MaterialObject3D;
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
	import org.papervision3d.objects.primitives.Arrow;
	import org.papervision3d.view.BasicView;
 
	[SWF(width="300", height="300", backgroundColor="#000000", frameRate="31")]
	public class CalculateMultiply3x3 extends BasicView
	{
		private var arrow1:Arrow;
		private var arrow2:Arrow;
		private var arrow3:Arrow;
 
		public function CalculateMultiply3x3()
		{
			super(300, 300);
			opaqueBackground = 0x000000;
 
			var light:LightObject3D = new PointLight3D();
			var material:MaterialObject3D = new FlatShadeMaterial(light, 0xcc0000, 0x333333, 10);
 
			arrow1 = new Arrow(material);
			arrow1.x = -250;
			scene.addChild(arrow1);
 
			arrow2 = new Arrow(material);
			scene.addChild(arrow2);
 
			arrow3 = new Arrow(material);
			arrow3.x = 250;
			scene.addChild(arrow3);
 
			startRendering();
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			/* 
			CaculateMultiply3x3 is most often used for advanced rotations where you find the
			axis you want to rotate around at run-time (like a ball rolling in a certain direction).
 
			First, create (or find) a rotation matrix with an axis and a rotation then use 
			calculateMultiply3x3 to add to your object's rotation using your 
			rotation matrix.
 
			It's easiest to think of it in pseudocode as "myObject.rotation += myCustomRotation".
			Another way to think of it: "Rotate this much around this axis
			 */
 
			/* 
			The following commented code is equivalent to arrow.rotationY += 1;
 
			//the axis to rotate around
			var upAxis:Number3D = new Number3D(0, 1, 0);
			//the amount of rotation around that axis
			var rotation:Number = 1 * Number3D.toRADIANS;
 
			var rotationMatrix:Matrix3D = Matrix3D.rotationMatrix(upAxis.x, upAxis.y, upAxis.z, rotation);
			arrow.transform.calculateMultiply3x3(rotationMatrix, arrow.transform);
			 */
 
			//example 1
			var axis1:Number3D = new Number3D(1, 0, 0);
			axis1.normalize();
 
			var rotation1:Number = 3 * Number3D.toRADIANS;
 
			var rotationMatrix1:Matrix3D = Matrix3D.rotationMatrix(axis1.x, axis1.y, axis1.z, rotation1);
			arrow1.transform.calculateMultiply3x3(rotationMatrix1, arrow1.transform);
 
			//example 2
			var axis2:Number3D = new Number3D(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY, 0);
			axis2.normalize();
 
			var rotation2:Number = 3 * Number3D.toRADIANS;
 
			var rotationMatrix2:Matrix3D = Matrix3D.rotationMatrix(axis2.x, axis2.y, axis2.z, rotation2);
			arrow2.transform.calculateMultiply3x3(rotationMatrix2, arrow2.transform);
 
			//example 3			
			var axis3:Number3D = new Number3D(.7, .7, .1);
			axis3.normalize();
 
			var rotation3:Number = viewport.containerSprite.mouseX / 50 * Number3D.toRADIANS;
 
			var rotationMatrix3:Matrix3D = Matrix3D.rotationMatrix(axis3.x, axis3.y, axis3.z, rotation3);
			arrow3.transform.calculateMultiply3x3(rotationMatrix3, arrow3.transform);
 
			super.onRenderTick(event);
		}
	}
}