looks like rendering occurs only once : at "_view" initialization, because
"render3D()" is in the "if(!_view) {...}"...thomas --- http://www.web-attitude.fr/ msn : [email protected] softphone : sip:[email protected] <sip%[email protected]> téléphone portable : +33601 822 056 2009/5/4 Marisa <[email protected]> > > > > 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. > > http://www.nabble.com/file/p23299407/temp.jpg > 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: > -- > View this message in context: > http://www.nabble.com/Create-new-Canvas-with-Papervision3D-tp23299407p23299407.html > Sent from the FlexCoders mailing list archive at Nabble.com. > > >

