Have you tried using away3d.primitives.Cube, or is there a reason why you need
to use seperate planes?
On Mon, 04 Jan 2010 09:10:51 -0800, Ghislain Flandin <[email protected]>
wrote:
> Hello guys ... Happy New Year ...
> I'm trying to make a 6-planes-cube rotate but i have a problem ...
> I used the applyRotations method on the container but the result is
> not good ...
> Maybe you can help me ...
> Here is the code :
> package
> {
> import away3d.containers.ObjectContainer3D;
> import away3d.containers.View3D;
> import away3d.core.base.Vertex;
> import away3d.core.math.Number3D;
> import away3d.geom.Explode;
> import away3d.geom.Mirror;
> import away3d.materials.ColorMaterial;
> import away3d.materials.utils.SimpleShadow;
> import away3d.primitives.Cube;
> import away3d.primitives.Plane;
> import away3d.primitives.ReflectivePlane;
> import away3d.primitives.Sphere;
> import flash.display.Bitmap;
> import flash.display.BitmapData;
> import flash.display.BlendMode;
> import flash.display.Sprite;
> import flash.display.StageAlign;
> import flash.display.StageScaleMode;
> import flash.events.Event;
> import flash.events.KeyboardEvent;
> import flash.filters.BitmapFilterQuality;
> import flash.filters.BlurFilter;
> import flash.geom.Matrix;
> import flash.geom.Rectangle;
> import flash.text.TextField;
> import gs.TweenMax;
> public class Main extends View3D
> {
> private var container:ObjectContainer3D;
> private var planes:Array;
> public function Main():void
> {
> if (stage) init();
> else addEventListener(Event.ADDED_TO_STAGE, init);
> }
> private function init(e:Event = null):void
> {
> removeEventListener(Event.ADDED_TO_STAGE, init);
> //stage setup
> stage.scaleMode = StageScaleMode.NO_SCALE;
> stage.align = StageAlign.TOP_LEFT;
> //position setup
> x = this.stage.stageWidth / 2;
> y = this.stage.stageHeight / 2;
> //camera setup
> camera.x = 300;
> camera.z = -900;
> camera.y = 100;
> //planes'array
> planes = new Array();
> //containers instances
> container = new ObjectContainer3D();
> for (var i:int = 0; i < 6; i+=1)
> {
> var col:uint = Math.random() * 0xFFFFFF;
> var mat:ColorMaterial = new ColorMaterial(col);
> var p:Plane = new Plane({ width:100, height:100,
material:mat,
> segmentsW:8, segmentsH:8,bothsides:true } );
> if (i == 0)
> {
> p.z = -50;
> p.rotationX = 90;
> }
> if (i == 1) p.y = 50;
> if (i == 2)
> {
> p.z = 50;
> p.rotationX = 90;
> }
> if (i == 3) p.y = -50;
> if (i == 4)
> {
> p.x = 50;
> p.rotationX = 90;
> p.rotationY = 90;
> }
> if (i == 5)
> {
> p.x = -50;
> p.rotationX = 90;
> p.rotationY = 90;
> }
> container.addChild(p);
> planes.push(p);
> }
> //scene feed
> scene.addChild(container);
> camera.lookAt(new Number3D());
> //handlers
> addEventListener(Event.ENTER_FRAME, enterFrame, false, 0,
true);
> stage.addEventListener(KeyboardEvent.KEY_UP, onPressKey,
false, 0,
> true);
> }
> private function onPressKey(e:KeyboardEvent):void
> {
> switch(e.keyCode)
> {
> case 37: //left
> TweenMax.to(container, 0.3, {
rotationY:"-90",
> onComplete:rotationComplete,onCompleteParams:["y",-90],
> overwrite:false } );
> break;
> case 39: //right
> TweenMax.to(container, 0.3, {
rotationY:"90",
> onComplete:rotationComplete,onCompleteParams:["y",90],
> overwrite:false } );
> break;
> case 38: //up
> TweenMax.to(container, 0.3, {
rotationX:"-90",
> onComplete:rotationComplete,onCompleteParams:["x",-90],
> overwrite:false } );
> break;
> case 40: //down
> TweenMax.to(container, 0.3, {
rotationX:"90",
> onComplete:rotationComplete,onCompleteParams:["x",90],
> overwrite:false } );
> break;
> }
> }
> private function
rotationComplete(rotation:String,angle:Number):void
> {
> container.applyRotations();
> }
> private function enterFrame(e:Event):void
> {
> var diffX:Number = (this.stage.mouseX - Math.round
> (this.stage.stageWidth / 2)) / Math.round(this.stage.stageWidth / 2);
> var diffY:Number = (this.stage.mouseY - Math.round
> (this.stage.stageHeight/ 2)) / Math.round(this.stage.stageHeight / 2);
> render();
> }
> }
> }
> the link :http://pastebin.com/m54e44c4a
> Thanks for your help !!!
> Ghislain