Por cierto lo he modificado la clase para que me haga lo que necesito os
dejo aqui el archivo por si veis algo mal pero ami para MaterialFile me
funciona por unidad.
/*
 *  PAPER    ON   ERVIS  NPAPER ISION  PE  IS ON  PERVI IO  APER  SI  PA
 *  AP  VI  ONPA  RV  IO PA     SI  PA ER  SI NP PE     ON AP  VI ION AP
 *  PERVI  ON  PE VISIO  APER   IONPA  RV  IO PA  RVIS  NP PE  IS ONPAPE
 *  ER     NPAPER IS     PE     ON  PE  ISIO  AP     IO PA ER  SI NP PER
 *  RV     PA  RV SI     ERVISI NP  ER   IO   PE VISIO  AP  VISI  PA  RV3D
 *  ______________________________________________________________________
 *  papervision3d.org � blog.papervision3d.org �
osflash.org/papervision3d
 */

/*
 * Copyright 2006-2007 (c) Carlos Ulloa Matesanz, noventaynueve.com.
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

//  ______________________________________________________________________
BITMAP FILE MATERIAL

package org.papervision3d.materials
    {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.DisplayObject;
    import flash.display.Graphics;
    import flash.display.Loader;
    import flash.events.*;
    import flash.net.URLRequest;
    import flash.utils.Dictionary;

    import org.papervision3d.Papervision3D;
    import org.papervision3d.core.geom.Face3D;
    import org.papervision3d.core.geom.Vertex2D;
    import org.papervision3d.core.proto.MaterialObject3D;
    import org.papervision3d.events.FileLoadEvent;
    import org.papervision3d.objects.DisplayObject3D;

    /**
    * The BitmapFileMaterial class creates a texture by loading a bitmap
from an external file.
    *
    * Materials collect data about how objects appear when rendered.
    */
    public class BitmapFileMaterial extends BitmapMaterial
    {

        //
___________________________________________________________________ PUBLIC
        /**
         * Add by Alvaro Touzon is preloader.
         * lo que hago es un display object que usare para que actue como
preloader independiente
         */
        public var preloader:Object = null;
        /**
        * The URL that has been requested.
        */
        public var url :String = "";

        /**
        * Whether or not the texture has been loaded.
        */
        public var loaded :Boolean;

        /**
        * Function to call when the last image has loaded.
        */
        static public var callback :Function;

        /**
        * The color to use in materials before loading has finished.
        */
        static public var LOADING_COLOR :int =
MaterialObject3D.DEFAULT_COLOR;

        /**
         * The color to use for the lines when there is an error.
         */
        static public var ERROR_COLOR:int = MaterialObject3D.DEBUG_COLOR;

        /**
        * A texture object.
        */
        override public function get texture():Object
        {
            return this._texture;
        }
        /**
        * @private
        */
        override public function set texture( asset:Object ):void
        {
            if( asset is String == false )
            {
                Papervision3D.log("Error: BitmapFileMaterial.texture
requires a String for the texture");
                return;
            }

            bitmap   = createBitmapFromURL( String(asset) );
            _texture = asset;
        }

        /**
         * Internal
         *
         * Used to define if the loading had failed.
         */
        private var errorLoading:Boolean = false;

        //
___________________________________________________________________ NEW

        /**
        * The BitmapFileMaterial class creates a texture by loading a bitmap
from an external file.
        *
        * @param    url                    The URL of the requested bitmap
file.
        * @param    initObject            [optional] - An object that
contains additional properties with which to populate the newly created
material.
        */
        public function BitmapFileMaterial( url :String="" )
        {
            // save URL reference
            this.url = url;
            trace(this);
            // set the loaded flag
            this.loaded = false;

            // Loading color
            this.fillAlpha = 1;
            this.fillColor = LOADING_COLOR;

            // start the loading by setting the texture
            if ( url.length > 0 ) texture = url;
            loadNextBitmap();
        }

        //
___________________________________________________________________ CREATE
BITMAP

        /**
        * [internal-use]
        *
        * @param    asset
        * @return
        */
        protected function createBitmapFromURL( asset:String ):BitmapData
        {
            // Empy string?
            if( asset == "" )
            {
                return null;
            }
            // Already loaded?
            else if( _loadedBitmaps[ asset ] )
            {
                var bmp:BitmapData = _loadedBitmaps[ asset ];

                bitmap = super.createBitmap( bmp );

                this.loadComplete();

                return bmp;
            }
            else
            {
                queueBitmap( asset );
            }

            return null;
        }

        //
___________________________________________________________________ QUEUE
BITMAP

        private function queueBitmap( file:String ):void
        {
            // New filename?
            if( ! _subscribedMaterials[ file ] )
            {
                // Queue file
                _waitingBitmaps.push( file );

                // Init subscription
                _subscribedMaterials[ file ] = new Array();
            }

            // Subscribe material
            _subscribedMaterials[ file ].push( this );

            // Launch loading if needed
            /*if( _loadingIdle )
                loadNextBitmap();*/
        }

        //
___________________________________________________________________ LOAD
NEXT BITMAP

        private function loadNextBitmap():void
        {
            // Retrieve next filename in queue
            var file:String = _waitingBitmaps[0];
            var request:URLRequest = new URLRequest( file );
            var bitmapLoader:Loader = new Loader();

            bitmapLoader.contentLoaderInfo.addEventListener(
ProgressEvent.PROGRESS, loadBitmapProgressHandler );
            bitmapLoader.contentLoaderInfo.addEventListener( Event.COMPLETE,
loadBitmapCompleteHandler );
            bitmapLoader.contentLoaderInfo.addEventListener(
IOErrorEvent.IO_ERROR, loadBitmapErrorHandler );

            try
            {
                // Load bitmap
                bitmapLoader.load( request );

                // Save original url
                _loaderUrls[ bitmapLoader ] = file;

                // Busy loading
                _loadingIdle = false;

                Papervision3D.log( "BitmapFileMaterial: Loading bitmap from
" + file);
            }
            catch( error:Error )
            {
                // Remove from queue
                _waitingBitmaps.shift();

                // Loading finished
                _loadingIdle = true;

                Papervision3D.log( "[ERROR] BitmapFileMaterial: Unable to
load file " + error.message );
            }
        }

        //
___________________________________________________________________ LOAD
BITMAP ERROR HANDLER

        private function loadBitmapErrorHandler( e:IOErrorEvent ):void
        {

            var failedAsset:String = String(_waitingBitmaps.shift());
            // force the IOErrorEvent to trigger on any reload.
            // ie: no reload on retry if we don't clear these 2 statics
below.
            _loadedBitmaps[failedAsset] = null;
            _subscribedMaterials[failedAsset] = null;

            this.errorLoading = true;
            this.lineColor = ERROR_COLOR;
            this.lineAlpha = 1;
            this.lineThickness = 1;

            // Queue finished?
            if( _waitingBitmaps.length > 0 )
            {
                // Continue loading
                loadNextBitmap();
            }
            else
            {
                // Loading finished
                _loadingIdle = true;

                if( Boolean( callback ) ) callback();
            }

            var event:FileLoadEvent = new
FileLoadEvent(FileLoadEvent.LOAD_ERROR, failedAsset, -1, -1, e.text);

            dispatchEvent(event);
        }

        //
___________________________________________________________________ LOAD
BITMAP PROGRESS HANDLER

        private function loadBitmapProgressHandler( e:ProgressEvent ):void
        {
            this.url = _waitingBitmaps[0];
            var obj:Object = _subscribedMaterials[ url ] ;

            var progressEvent:FileLoadEvent = new FileLoadEvent(
FileLoadEvent.LOAD_PROGRESS, this.url, e.bytesLoaded, e.bytesTotal,
"cargando", this );
            dispatchEvent( progressEvent );
        }

        //
___________________________________________________________________ LOAD
BITMAP COMPLETE HANDLER

        private function loadBitmapCompleteHandler( e:Event ):void
        {
            var loader:Loader = Loader( e.target.loader );

            var loadedBitmap:Bitmap = Bitmap( loader.content );

            // Retrieve original url
            var url:String = _loaderUrls[ loader ];

            // Retrieve loaded bitmapdata

            var bmp:BitmapData = super.createBitmap( loadedBitmap.bitmapData
);

            // Update subscribed materials
            for each( var material:BitmapFileMaterial in
_subscribedMaterials[ url ] )
            {
                material.bitmap = bmp;
                material.maxU = this.maxU;
                material.maxV = this.maxV;
                material.resetMapping();
                material.loadComplete();
            }

            // Include in library
            _loadedBitmaps[ url ] = bmp;

            // Remove from queue
            _waitingBitmaps.shift();

            // Queue finished?
            if( _waitingBitmaps.length > 0 )
            {
                // Continue loading
                //loadNextBitmap();
            }
            else
            {
                // Loading finished
                _loadingIdle = true;
                trace("ENTRO")
                if( Boolean( callback ) ) callback();
            }
        }

        //
___________________________________________________________________ LOAD
COMPLETE

        private function loadComplete():void
        {
            this.fillAlpha = 0;
            this.fillColor = 0;
            this.loaded = true;

            // Dispatch event
            var fileEvent:FileLoadEvent = new FileLoadEvent(
FileLoadEvent.LOAD_COMPLETE, this.url );
            this.dispatchEvent( fileEvent );
        }

        /**
         *  drawFace3D
         */
        override public function drawFace3D(instance:DisplayObject3D,
face3D:Face3D, graphics:Graphics, v0:Vertex2D, v1:Vertex2D, v2:Vertex2D):int
        {
            if (bitmap == null || errorLoading)
            {
                var x0:Number = v0.x;
                var y0:Number = v0.y;
                var x1:Number = v1.x;
                var y1:Number = v1.y;
                var x2:Number = v2.x;
                var y2:Number = v2.y;
                if(errorLoading){
                    graphics.lineStyle(lineThickness,lineColor,lineAlpha);
                }
                graphics.beginFill( fillColor, fillAlpha );
                graphics.moveTo( x0, y0 );
                graphics.lineTo( x1, y1 );
                graphics.lineTo( x2, y2 );
                graphics.lineTo( x0, y0 );
                graphics.endFill();
                if(errorLoading){
                    graphics.lineStyle();
                }
                return 1;
            }

            var i:int = super.drawFace3D(instance, face3D, graphics, v0, v1,
v2);
            return i;
        }



        //
___________________________________________________________________ PRIVATE

        // Filenames in the queue
         private var _waitingBitmaps :Array = new Array();

        // URLs per loader
        static private var _loaderUrls :Dictionary = new Dictionary();

        // Loaded bitmap library
        static private var _loadedBitmaps :Object = new Object();

        // Materials subscribed  to the loading queue
        static private var _subscribedMaterials :Object = new Object();

        // Loading status
        static private var _loadingIdle :Boolean = true;
    }
}

El día 7 de mayo de 2008 22:53, Alvaro Touzon <[EMAIL PROTECTED]>
escribió:

> si lo veo pero para que usazs DisplayObject3D?
> Lo que no veo es que traces e,target.name, lo voy a probar.
> Si es conjuno el XML en as3
>
> El día 7 de mayo de 2008 11:48, drusunlimited listas <
> [EMAIL PROTECTED]> escribió:
>
> Hola Alvaro, he probado a ponerle name al material para poder
> > recuperarlo desde el evento y me funciona perfectamente.
> >
> > Perdona la perogrullada pero es por centranos, y es que no se me
> > ocurre otra cosa: el FileLoadEvent que recibe la funcion onLoading
> > hace referencia al material, no al displayObject3D sobre el que se
> > aplica el material, entonces...
> >
> > ¿estás creando un material diferente (y dandole un nombre diferente)
> > para cada displayObject donde aplicas el material en ese for?
> >
> > A mi algo así me funciona:
> > [code]
> > for(var i:Number=0;i<l;i++){
> >        var holder_item:DisplayObject3D=new DisplayObject3D();
> >         stage.addChild(holder_item);
> >        var img:String=_xml.item.attribute("img")[i]; //esto es
> > maravilloso
> > por cierto :)
> >         var materialFront:BitmapFileMaterial=new
> > BitmapFileMaterial(img);
> >         materialFront.name="minombre"+i;
> >
> >  materialFront.addEventListener(FileLoadEvent.LOAD_COMPLETE,onLoaded);
> >
> >  materialFront.addEventListener(FileLoadEvent.LOAD_PROGRESS,onLoading);
> > }
> >
> > private function onLoaded(e:FileLoadEvent):void{
> >         trace(e.bytesLoaded+" >> target << "+e.target.name);
> > }
> >
> > private function onLoading(e:FileLoadEvent):void{
> >        trace(e.bytesLoaded);
> > }
> >
> > [/code]
> >
> > Un saludo
> >
> > 2008/5/7 Alvaro Touzon <[EMAIL PROTECTED]>:
> > > Hola Javier, si el problema esta aqui al menos sobre flash, yo uso la
> > >  principal de as3.
> > >  Mira
> > >  si cambias esto
> > >
> > > private function onLoading(e:FileLoadEvent):void{
> > >                        trace(e.bytesLoaded);
> > >                }
> > >  por esto
> > >
> > > private function onLoading(e:FileLoadEvent):void{
> > >                        trace(e.bytesLoaded+" target"+e.target.name);
> > >
> > >                }
> > >  a mi solo me sale el nombre del primer item de la secuencia. Con lo
> > cual no
> > >  puedo hacer un preloader por secuancia.
> > >  Espero que me entiendas, muchas gracias
> > >
> > >
> > >
> > >  El día 6 de mayo de 2008 22:44, Javier Fernández Montes <
> > >  [EMAIL PROTECTED]> escribió:
> > >
> > >
> > >
> > >  > Hola Alvaro, desde mi desconocimiento, puesto que estoy empezando
> > con
> > >  > papervision, te puedo decir que a mi me funcionan los eventos sin
> > >  > problemas.
> > >  >
> > >  > ¿qué rama de papervision utilizas?
> > >  > Yo uso la greatwhite desde flex y va como la seda, salvo unos
> > cuanto
> > >  > warnings por omisión de tipos/retornos que he tenido que corregir a
> > >  > mano, pero que no impedían compilar.
> > >  >
> > >  > Ahora mismo estoy haciendo una frikada tipo:
> > >  > [code]
> > >  >                ...
> > >  >                public function fInitArchive():void{
> > >  >                        var l:Number=_xml.children().length();
> > >  >                        holder_archivo=new DisplayObject3D();
> > >  >                        basicview.scene.addChild(holder_archivo);
> > >  >                        rueda_archivo=new DisplayObject3D();
> > >  >                        holder_archivo.addChild(rueda_archivo);
> > >  >                        holder_archivo.z=500;
> > >  >                        for(var i:Number=0;i<l;i++){
> > >  >                                var holder_item:DisplayObject3D=new
> > >  > DisplayObject3D();
> > >  >                                rueda_archivo.addChild(holder_item);
> > >  >                                var
> > img:String=_xml.item.attribute("img");
> > >  >                                var
> > materialFront:BitmapFileMaterial=new
> > >  > BitmapFileMaterial(img);
> > >  >                                var
> > materialBack:BitmapFileMaterial=new
> > >  > BitmapFileMaterial(img);
> > >  >                                materialFront.smooth=true;
> > >  >
> > >  >
> > materialFront.addEventListener(FileLoadEvent.LOAD_COMPLETE,onLoaded);
> > >  >
> > >  >
> > materialFront.addEventListener(FileLoadEvent.LOAD_PROGRESS,onLoading);
> > >  >                                var itemFront:Plane=new
> > >  > Plane(materialFront,290,56,14,4);
> > >  >                                var itemBack:Plane=new
> > >  > Plane(materialBack,290,56,1,1);
> > >  >                                holder_item.addChild(itemFront);
> > >  >                                holder_item.addChild(itemBack);
> > >  >                                itemFront.x=itemBack.x=750;
> > >  >                                itemBack.rotationY=180;
> > >  >                                holder_item.rotationZ=i*(180/l);
> > >  >                        }
> > >  >
> > >  >  stage.addEventListener(Event.ENTER_FRAME,renderLoop);
> > >  >                }
> > >  >                private function onLoaded(e:FileLoadEvent):void{
> > >  >                        trace(e.bytesTotal);
> > >  >                }
> > >  >                private function onLoading(e:FileLoadEvent):void{
> > >  >                        trace(e.bytesLoaded);
> > >  >                }
> > >  >                ...
> > >  > [/code]
> > >  >
> > >  > Y ya te digo que ningún problema.
> > >  >
> > >  >
> > >  >     Javier Fernández :: Drus Unlimited™
> > >  >     listas[at]drusunlimited[dot]com
> > >  >     http://drusunlimited.com
> > >  >
> > >  > El 05/05/2008, a las 12:39, Alvaro Touzon escribió:
> > >  >
> > >  > > Hola estoy empezando con papervision y cuando creo una galeria de
> > x
> > >  > > img ,
> > >  > > con "BitmapFileMaterial", y realizo un preloader LOAD_PROGRESS,
> > no me
> > >  > > actualiza los datos del  target, me mantiene el del primer
> > material
> > >  > > que
> > >  > > llamo.
> > >  > >
> > >  > > var material:BitmapFileMaterial = new BitmapFileMaterial(img);
> > >  > >
> > >  > >
> > >  > >            material.addEventListener(FileLoadEvent.LOAD_COMPLETE,
> > >  > > onLoaded);
> > >  > >            material.addEventListener(FileLoadEvent.LOAD_PROGRESS,
> > >  > > onLoading);
> > >  > >
> > >  > > Algu no ha tenido ya este problema he visto por google peo no le
> > veo
> > >  > > la
> > >  > > solucion, intentare darsela pero lo veo lejos, pues  no conocco
> > bien
> > >  > > el
> > >  > > framework.
> > >  > > Gracias.
> > >  > > -----------------------------------------------------
> > >  > > ASNativos
> > >  > > www.5dms.com
> > >  > > subscripciones/desubscripciones
> > >  > > http://asnativos.5dms.com
> > >  > > -----------------------------------------------------
> > >  >
> > >  >
> > >  > -----------------------------------------------------
> > >  > ASNativos
> > >  > www.5dms.com
> > >  > subscripciones/desubscripciones
> > >  > http://asnativos.5dms.com
> > >  > -----------------------------------------------------
> > >  >
> > >  -----------------------------------------------------
> > >  ASNativos
> > >  www.5dms.com
> > >  subscripciones/desubscripciones
> > >  http://asnativos.5dms.com
> > >  -----------------------------------------------------
> > >
> >
> >
> >
> > --
> >  Javier Fernández :: Drus Unlimited™
> >  http://drusunlimited.com
> >
> > -----------------------------------------------------
> > ASNativos
> > www.5dms.com
> > subscripciones/desubscripciones
> > http://asnativos.5dms.com
> > -----------------------------------------------------
> >
>
>
-----------------------------------------------------
ASNativos
www.5dms.com
subscripciones/desubscripciones
http://asnativos.5dms.com
-----------------------------------------------------

Responder a