pv3d mouse controlled rotation
♥0 |
Line 56 |
Modified 2009-04-22 19:20:35 |
MIT License
archived:2017-03-30 01:50:46
ActionScript3 source code
/**
* Copyright yonatan ( http://wonderfl.net/user/yonatan )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ykON
*/
// forked from mash's papervision3d light and a flatshadedcube
// forked from mash's papervision3d simple example (cube)
package {
import flash.display.*;
import flash.events.*;
import flash.geom.Point;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.core.math.*;
import org.papervision3d.materials.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
public class PV3D_01 extends Sprite {
private var camera :Camera3D;
private var scene :Scene3D;
private var viewport :Viewport3D;
private var renderer :BasicRenderEngine;
private var cube :Cube;
public function PV3D_01() {
camera = new Camera3D();
camera.x = 0;
camera.y = 0;
camera.z = -1000;
scene = new Scene3D();
viewport = new Viewport3D( stage.stageWidth, stage.stageHeight );
renderer = new BasicRenderEngine();
addChild( viewport );
var light:PointLight3D = new PointLight3D(false);
light.x = 0;
light.y = 0;
light.z = -1000;
var materials :MaterialsList = new MaterialsList( { all : new FlatShadeMaterial(light, 0xD7261C ) } );
cube = new Cube( materials );
cube.x = 0;
cube.y = 0;
cube.z = 0;
scene.addChild( cube );
addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
private static const SPEED:Number = 1/4000;
public function onEnterFrame(e:Event): void {
var mp:Point = new Point(
stage.width/2 - mouseX,
stage.height/2 - mouseY );
var angle:Number = -mp.length * SPEED;
mp.normalize( 1 );
// swap x and y to get rotation axis
cube.transform.calculateMultiply(
Matrix3D.rotationMatrix( mp.y, mp.x, 0, angle ),
cube.transform );
renderer.renderScene( scene, camera, viewport );
}
}
}