Hello, 

I'm going to create a new component with 3D effect. But I encounter this
problem.
I can't change the position of the Planes in function organize3DLayout but I
can change the
Images position by child.x = 200; etc.
All the planes are still in the center of the canvas. 
I feel only the codes in function addChild is effective.

 child.x = unscaledWidth/2 - child.width/2;
child.y = unscaledHeight/2 - child.height/2;

Anyone can help? I really confused.


package
{
        import caurina.transitions.Tweener;
        
        import flash.display.DisplayObject;
        import flash.events.Event;
        import flash.utils.Dictionary;
        
        import mx.containers.Canvas;
        
        import org.papervision3d.cameras.Camera3D;
        import org.papervision3d.events.InteractiveScene3DEvent;
        import org.papervision3d.materials.MovieMaterial;
        import org.papervision3d.objects.DisplayObject3D;
        import org.papervision3d.objects.primitives.Plane;
        import org.papervision3d.render.BasicRenderEngine;
        import org.papervision3d.scenes.Scene3D;
        import org.papervision3d.view.Viewport3D;
        public class Canvas3DCom extends Canvas
        {
                //debug mode
                public var DEBUG:Boolean=false;
                //interactivity
                public var INTERACTIVITY:Boolean=false;
                //effects
                public var EFFECTS:Boolean=false;
                
                //tweening time (ms)
                private var _tw_time:Number=1000;
                        
                //papervision basics
                private var _view:Viewport3D;
                private var _cam:Camera3D;
                private var _scene:Scene3D;
                private var _render:BasicRenderEngine;
                
                //defines planes segments
                private var _meshquality:Number = 2;
                //root node for nesting 3D objects
                private var _root3D:DisplayObject3D;
                //children dictionary
                /**
                 * @description: associates displayobjects to planes. 
dictionary key are
viewstack children. values are planes on 3D space.
                 * !IMPORTANT: uses weak reference to ease garbage collection
                 **/
                private var _toPlane:Dictionary;
                private var _toChild:Dictionary;
                private var _current3DChild:DisplayObject3D;
                
                //viewports h,w
                private var _viewport_width:Number=0;
                private var _viewport_height:Number=0;
                
                //x gap 
                private var _xgap:Number= 50;
                //coverflow angulation
                private var _cfangle:Number = 60;
                //number of the ring
                private var _no_of_ring:int = 1;
                
                public function Canvas3DCom()
                {
                        super();
                        init3D();
                }
                
                /**
                 * @description: builds up 3D elements (scene, camera, renderer 
and
viewport)
                 **/
                private function init3D():void
                {
                        trace("INIT 3D");
                        _scene = new Scene3D();
                        
                        _cam = new Camera3D();
                        _cam.focus = 100;
                        //_cam.zoom = 11;
                        _cam.z = -1000;
                        
                        _render = new BasicRenderEngine();
                        //_view is going to be initialized in organizelayout
                        _toPlane = new Dictionary(true);
                        _toChild = new Dictionary(true);
                        _root3D = new DisplayObject3D();
                        _scene.addChild(_root3D);
                        
                }
                
                override public function 
addChild(child:DisplayObject):DisplayObject{
                        super.addChild(child);
//                      child.visible = false;
                        //set child position in the middle of the viewstack
                        child.x = unscaledWidth/2 - child.width/2;
                        child.y = unscaledHeight/2 - child.height/2;
                        //add a new plane to the 3d stack
                        addChild3D(child);

                        return child;
                }
                
                 /**
                 * @description: addChild3D adds a DisplayObject3D to 
viewstack3d and
associates it with its own relative child on 2D space
                 **/
                 private function 
addChild3D(child:DisplayObject):DisplayObject3D
                 {
                        trace("addChild3D");
                        var mat:MovieMaterial = new 
MovieMaterial(child,true,true);
                        mat.oneSide=false;
                        mat.smooth = true;
                        mat.interactive = true;
                        if(child.width>_viewport_width) 
_viewport_width=child.width;
                        if(child.height>_viewport_height) 
_viewport_height=child.height;

                        //create plane, add plane to root3D, associate plane to 
child
                        var child3D:DisplayObject3D = new 
Plane(mat,child.width,child.height
,_meshquality,_meshquality);
                        _root3D.addChild(child3D);
                        _toPlane[child] = child3D;
                        _toChild[child3D] = child;
                        
                        //INTERACTIVITY!!!
                        //event listening for 3D objects
                 
child3D.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,selectChild3D);
                        
                        return child3D;
                 }
                 
                 /**
                 * @description: selects children from 3D object
                 **/
                 private function selectChild3D(e:InteractiveScene3DEvent):void
                 {
                        if(INTERACTIVITY){
                                //trace(_toChild[e.target]);
                                //TODO
                        }
                 }
                 
                /**
                 * @description: enterframe render loop
                 **/
                 private function loop3D(e:Event):void
                 {
                        try{
                                if(Tweener.isTweening(_cam) || 
Tweener.isTweening(_root3D)){
                                        if(!INTERACTIVITY || 
!EFFECTS)render3D();
                                }
                                if(INTERACTIVITY || EFFECTS)render3D();
                        }catch(e:Error){
                                trace("not able to render!");
                        } 
                        //render3D();
                 }
                 
                /**
                * @description: render scene
                **/
                private function render3D():void
                {
                        _render.renderScene(_scene,_cam,_view);
                }
                 
                 /**
                 * @description: override updateDisplayList to add 3D objects 
layout
                 **/
                 override protected function 
updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
                 {
                        super.updateDisplayList(unscaledWidth,unscaledHeight);
                        // layout all children in the root3D object
                        organize3DLayout();
                 }
                 
                 /**
                 * @description: organizes 3D objects layout switching current 
layout
                 **/
                 protected function organize3DLayout():void
                 {
                        
                        if(!_view){
                                _view = new
Viewport3D(this.unscaledWidth,this.unscaledHeight,false,true,false,false);
                                
                                rawChildren.addChild(_view);

                        render3D();
                                
                        layoutRING();
                }
                        
                 private function layoutRING():void{
                        var child3D:Plane;
                        var child:DisplayObject;
                        
                        var rootRot:Number = 0;
                        var rootX:Number = 0;
                        
                        for( var i:int = 0; i < numChildren; i++ ){
                                child = this.getChildAt(i);
                                child3D = _toPlane[child];

                                child3D.x = (_viewport_width + _xgap) * i;
                        }
                        
                 
Tweener.addTween(_cam,{z:-1000-(_viewport_width+_xgap),time:_tw_time*.001});
                 
Tweener.addTween(_root3D,{rotationY:rootRot,x:rootX,time:_tw_time*.001}); 
                        
                        for( var h:int = 0; h < numChildren; h++ ){
                                child = this.getChildAt(h);
                                child3D = _toPlane[child];
                        }
                 }
        }
}

<local:Canvas3DCom id="c3d" x="0" y="0" width="1000" height="750">
        <mx:Image id="i1" source="images/Belle.png" width="100" height="100"
toolTip="image1"/>
        <mx:Image id="i2" source="images/Belle.png" width="100" height="100"
toolTip="image2"/>
        <mx:Image id="i3" source="images/Belle.png" width="100" height="100"
toolTip="image3"/>
        <mx:Image id="i4" source="images/Belle.png" width="100" height="100"
toolTip="image4"/>
        <mx:Image id="i5" source="images/Belle.png" width="100" height="100"
toolTip="image5"/>
<!--    <mx:Image source="images/Belle.png" width="100" height="100"
toolTip="image6"/>
        <mx:Image source="images/Belle.png" width="100" height="100"
toolTip="image7"/>
        <mx:Image source="images/Belle.png" width="100" height="100"
toolTip="image8"/>
        <mx:Image source="images/Belle.png" width="100" height="100"
toolTip="image9"/>
        <mx:Image source="images/Belle.png" width="100" height="100"
toolTip="image0"/> -->
</local:Canvas3DCom>:confused: http://www.nabble.com/file/p23302385/temp.jpg 
-- 
View this message in context: 
http://www.nabble.com/Create-new-Canvas-with-Papervision3D-tp23302385p23302385.html
Sent from the Flex Component Development mailing list archive at Nabble.com.

Reply via email to