Hi,

I'm using a couple of PNG's defined as Classes in a SWC. I'm adding
them to stage and want to do nice transitions with away3d. I'm
splitting those PNG into several small pieces (tiles). This works,
I've tested it.

When I hand those BitmapData objects over to Away3D as BitmapMaterial
parameter it seems to work, but at runtime I'm getting this error:
(means parameter shouldnt be null)

TypeError: Error #2007: Parameter bitmap darf nicht 'null' sein.
    at flash.display::Graphics/beginBitmapFill()
    at flash.display::Graphics/beginFillObject()
    at flash.display::Graphics/drawGraphicsData()
    at away3d.core.render::AbstractRenderSession/
renderTriangleBitmapF10()[H:\Classes\AS3\away3d\core\render
\AbstractRenderSession.as:674]
    at away3d.materials::BitmapMaterial/renderTriangle()[H:\Classes
\AS3\away3d\materials\BitmapMaterial.as:625]
   ...

My script is this:

package de.leerraum
{
        import away3d.cameras.Camera3D;
        import away3d.containers.Scene3D;
        import away3d.containers.View3D;
        import away3d.materials.BitmapMaterial;
        import away3d.materials.ColorMaterial;
        import away3d.primitives.Plane;
        import flash.display.BitmapData;
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.media.Camera;

        import gs.TweenMax;

        /**
         * ...
         * @author Kai Reinhardt
         */
        public class PlaneHandler extends Sprite
        {
                private var bitmapSource : BitmapResolver;
                private var bitmapTarget : BitmapResolver;
                private var xTiles : int;
                private var yTiles : int;
                private var tileWidth : int = 95;
                private var tileHeight : int = 49;
                private var bitmapSourceReady : Boolean = false;
                private var bitmapTargetReady : Boolean = false;
                private var tilePlane : Plane;
                private var frontMaterial : BitmapMaterial;
                private var backMaterial : BitmapMaterial;

                private var planeArray : Array;

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


                public function PlaneHandler(input:BitmapData, output: 
BitmapData,
xTiless:int, yTiless:int)
                {

                        trace("PlaneHandler called : input.width: 
"+input.width+ "
output.width: "+output.width);

                        xTiles = xTiless;
                        yTiles = yTiless;

                        planeArray = [];

                        bitmapSource = new BitmapResolver();
                        bitmapTarget = new BitmapResolver();
                        bitmapSource.addEventListener("bitmapsReady", 
triggerBothReady);
                        bitmapTarget.addEventListener("bitmapsReady", 
triggerBothReady);
                        bitmapSource.resolve(input, xTiles, yTiles);
                        bitmapTarget.resolve(output, xTiles, yTiles);


                }

                private function triggerBothReady(ev:Event):void
                {

                        if (ev.target == bitmapSource) {
                                bitmapSourceReady = true;
                        }
                        if (ev.target == bitmapTarget) {
                                bitmapTargetReady = true;
                        }

                        createPlanes();

                }

                private function createPlanes ():void
                {

                        if ( bitmapSourceReady == true && bitmapTargetReady == 
true ) {

                                view = new View3D();
                                scene = new Scene3D();

                                for (var i: int = 0; i < yTiles; i++)
                                {

                                        for (var o:int = 0; o < xTiles; o++)
                                        {

                                                frontMaterial = new 
BitmapMaterial(bitmapSource.BitmapArray[i]
[o],{debug:true});
                                                backMaterial = new 
BitmapMaterial(bitmapTarget.BitmapArray[i][o],
{debug:true});

                                                // dummymaterialien für den 
funktionstest
                                                var cmf : ColorMaterial = new 
ColorMaterial
(0xFF00FF);
                                                var cmb : ColorMaterial = new 
ColorMaterial(0x00FF00);

                                                tilePlane  = new Plane( {x: 
o*tileWidth, y: i*tileHeight,
width:tileWidth, height:tileHeight, segments: 2, segmentsW:2,segmentsH:
2, material:frontMaterial, back:backMaterial , bothsides:true,
yUp:true } );
                                                tilePlane.rotationX = 90;
                                                tilePlane.x = o * tileWidth;
                                                tilePlane.y = i * tileHeight;
                                                tilePlane.z = 0;

                                                view.scene.addChild(tilePlane);

                                                planeArray.push(tilePlane);

                                        }

                                }

                                view.x = 122;
                                view.y = 626;

                                addChild(view);
                                addEventListener(Event.ENTER_FRAME, renderer);

                                //movePlanes();
                        }

                }

                private function renderer (ev:Event):void
                {

                        view.render();

                }
                private function resetAll():void
                {

                        removeEventListener(Event.ENTER_FRAME, renderer);

                        for ( var p : int = 0; p < planeArray.length; p++)
                        {

                                view.scene.removeChild(planeArray[p]);

                        }

                        removeChild(view);

                        dispatchEvent(new Event("tranisitionComplete"));
                }

                private function movePlanes():void
                {

                        for ( var p : int = 0; p < planeArray.length; p++)
                        {
                                if(p< planeArray.length-1){
                                        TweenMax.to(planeArray[p], 1, { 
rotationY:180, delay: Math.random
()*1 } );
                                }else {
                                        TweenMax.to(planeArray[p], 1, { 
rotationY:180,
onComplete:resetAll } );
                                }
                        }

                }

        }

}


BitmapResolver is splitting the image into tiles. It's storing the
bitmapData in a multidimensional array[x][y] (rows and cols)

Anyone who has an idea whats going wrong here is welcomed to correct
me.

Thanks
Leerraum

Reply via email to