Hello!

I'm trying to use one View3D with seperate camera and scene as a
MovieMaterial to be shown on Planes in another View3D. I tried to
figure this out several times but all i can see is just a background
of first (buffer) View3D.

Sorry for posting such a long code but it's still a bit messy. Hope
you'll forgive and help me ;) Thanks in advance

first simple custom class (just for holding Planes in linked list):

package
{
        import away3d.primitives.Plane;

        public class LinkedPlane extends Plane
        {

                public var next:LinkedPlane = null;

                public function LinkedPlane()
                {
                        super();
                }

        }
}


here comes the main code:

package {

        import __AS3__.vec.Vector;

        import away3d.cameras.*;
        import away3d.containers.*;
        import away3d.materials.*;
        import away3d.primitives.*;

        import flash.display.*;
        import flash.events.*;
        import flash.geom.Rectangle;

        [SWF
(width='1000',height='800',frameRate='60',backgroundColor='0x000000')]
        public class WormholeSpheres extends Sprite
        {


                private var view:View3D;
                private var camera:Camera3D;

                private var sph:Sphere;

                private var bufferView:View3D;
                private var bufferCamera:HoverCamera3D;

                private var bufferMaterial:MovieMaterial;


                private var wormLayer:Vector.<Sphere> = new Vector.<Sphere>();


                private var circleX:Vector.<int> = new Vector.<int>();
                private var circleY:Vector.<int> = new Vector.<int>();

                private const QUALITY:int = 12;  // defines number of spheres in
each layer

                private var spheres:Vector.<LinkedPlane> = new 
Vector.<LinkedPlane>;


                private function createBuffer():void
                {
                        sph = new Sphere();
                        sph.x = 60;
                        sph.y = 60;
                        sph.z = 100;
                        sph.radius = 50;
                        sph.segmentsH = 12;
                        sph.segmentsW = 12;

                        bufferView.graphics.beginFill(0xff0000);
                        bufferView.graphics.drawRect(0,0,256,256);
                        bufferView.graphics.endFill();

                        bufferView.scene.addChild(sph);

                }

                private function debug():void
                {
                        createBuffer();
                        precalculateXY(200);
                        var s: LinkedPlane;
                        for (var i:int = 0 ; i<=40 ; i++)
                        {
                                createCircle(i, 0,0,-4000+ i*100);
                                s = spheres[i].next;
                                do
                                {
                                        view.scene.addChild(s);
                                        s = s.next;
                                } while(s);
                        }

                }


                private function precalculateXY(radius:Number):void
                {
                        const d360:Number = 2 * Math.PI;

                        var i:int;
                        var step:Number = d360 / QUALITY;

                        for (i = 0 ; i <= QUALITY ; i++)
                        {
                                circleX[i] = radius * Math.sin(i*step);
                                circleY[i] = radius * Math.cos(i*step);
                        }
                }

                private function createCircle(index: int, xOffset:int, 
yOffset:int,
zOffset:int):void

                {
                        const polygonsQuality:int = 1;
                        const rad:int = 60;

                        var current: LinkedPlane;
                        var n: int = QUALITY;
                        var i:int = 0;

                        current = spheres[index] = new LinkedPlane();
                        for(;i<n;++i)
                        {
                                current = current.next = new LinkedPlane();
                                current.x = circleX[i] + xOffset;
                                current.y = circleY[i] + yOffset;
                                current.z = zOffset;
                                current.segmentsH = polygonsQuality;
                                current.segmentsW = polygonsQuality;
                                current.height = rad;
                                current.width = rad;
                                current.rotationX = 90;
                                current.bothsides = true;
                                current.material = bufferMaterial;


                        }




                }



                private function init3d():void
                {
                        camera = new HoverCamera3D();
                        camera.zoom = 4;
                        camera.x = 0;
                        camera.y = 0;
                        camera.z = 0;

                        view = new View3D();
                        view.x = 500;
                        view.y = 400;
                        view.camera = camera;

                        bufferCamera = new HoverCamera3D();
                        bufferView = new View3D();
                        bufferView.camera = bufferCamera;
                        bufferView.visible = false;


                }

                private function initStage():void
                {
                        stage.quality = StageQuality.LOW;

                        addChild(view);
                        addChild(bufferView);
                        bufferMaterial = new MovieMaterial(bufferView);

                        fps = new FPSCounter();
                        addChild(fps);

                }

                public function WormholeSpheres()
                {
                        init3d();
                        initStage();
                        debug();
                        addEventListener(Event.ENTER_FRAME, onEnterFrame);
                }

                private function onEnterFrame(e:Event):void
                {
                        bufferCamera.hover();
                        bufferView.render();

                        view.render();
                        camera.z -= 2;
                }
        }
}

Reply via email to