// 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);
}
}
}