前回のサンプルのボックスをアニメーションでローテーションさせるには、以下のようにすればよいらしい。
ここのチュートリアルがすごい。
import sandy.core.data.*; import sandy.core.group.*; import sandy.primitive.*; import sandy.view.*; import sandy.core.*; import sandy.skin.*; import sandy.util.*; import sandy.core.transform.*; import sandy.events.*; import sandy.core.light.*; function init( Void ):Void { // we create our camera var cam:Camera3D = new Camera3D( 600, 600 ); // we add the camera to the world var world:World3D=World3D.getInstance(); world.addCamera( cam ); // we move the camera backward to be able to see the object placed at 0,0,0 cam.setPosition(0, 0, -500); //We create the Light coming from the left with a low intensity (20) var l:Light3D = new Light3D (new Vector (1, 3, -3), 50); // set the world light world.setLight (l); // we create the root node. var bg:Group = new Group(); // and set it as the root node of the world. world.setRootGroup( bg ); // and we lauch the scene creation createScene( bg ); // On the render event call rotate() world.addEventListener (World3D.onRenderEVENT, this, rotate); // and now everything is created, we can launch the world rendering. world.render(); } var rotation:Transform3D; function createScene( bg:Group ):Void { // We create our object. It is a cube of 50 pixels, and with the quad mode, so here four points per face. var o:Object3D = new Box (50, 50, 50, 'quad'); // we create a skin to "dress up" the object a bit, and make it visually better. // SimpleColor skin is used here, it needs the fill color, alpha, and thickness var skin:Skin = new MixedSkin (0x00FF00, 100, 0, 100, 1); // NEW PART, we enable the light skin.setLightingEnable(true); // We apply the skin to the object o.setSkin (skin); // We create two TransformGroup instances. Each one corresponds to a node of the tree we are going to create.transformations var tg1:TransformGroup = new TransformGroup (); var tg2:TransformGroup = new TransformGroup (); // We also create two instances of Translation objects. // Give them an appropriate name, this becomes important very rapidly. var translation:Transform3D = new Transform3D (); rotation = new Transform3D (); // we translate the object by 500 pixels on the Z axis. translation.translate (0, 0, -300); // We rotate the object by 30 degrees on an axis oriented from the origin to the point (1, 1, 1). rotation.rotAxis (new Vector (1, 1, 1), 30); // We apply those transformations to the nodes. tg1.setTransform (translation); tg2.setTransform (rotation); // We add the rotation transformation to the node which represents the rotation by setting it as a child. // The rotation will be applied first, translation later (higher in the tree) tg2.addChild (o); // Now we link the two nodes // The order here is very important. tg1.addChild (tg2); // Now we simply link the translation node to the root node, thus completing the tree creation bg.addChild (tg1); } var degree:Number=30; function rotate(){ var tempdegree:Number=(degree++)%360; rotation.rotAxis (new Vector (1, 1, 1), tempdegree); } // We lauch the animation creation. init();
swfはこんな感じ。
フレームレートは24fpsにしている。