classes

FadeDisplacerPV.as

Stiahnuť FadeDisplacerPV.as

package sk.yoz.displacing
{
    import flash.display.BitmapData;
    import flash.display.Shader;
    import flash.display.ShaderJob;
    import flash.utils.ByteArray;
    
    import org.papervision3d.materials.BitmapMaterial;
    
    import sk.yoz.displacing.SimpleDisplacerPV;
    
    public class FadeDisplacerPV extends SimpleDisplacerPV
    {
        [Embed("FadeDisplacer.pbj", mimeType="application/octet-stream")]
        public static const SHADER_CLASS:Class;
        
        public var fade:BitmapData;
        public var fadeNear:Number = 0;
        public var fadeDistant:Number = 1;
        
        public function FadeDisplacerPV(
            viewportWidth:Number, viewportHeight:Number,
            image:BitmapData, map:BitmapData, fade:BitmapData,
            rotationXMax:Number = 10, rotationYMax:Number = 10,
            depth:Number = 10, segmentsW:uint = 20, segmentsH:uint = 20,
            fadeNear:Number = 0, fadeDistant:Number = 1)
        {
            this.fade = fade;
            this.fadeNear = fadeNear;
            this.fadeDistant = fadeDistant;
            
            super(viewportWidth, viewportHeight, image, map, 
                rotationXMax, rotationYMax, depth, segmentsW, segmentsH);
        }
        
        override protected function get material():BitmapMaterial
        {
            var w:uint = image.width;
            var h:uint = image.height;
            var bitmapData:BitmapData = new BitmapData(w, h, true);
            
            var shader:Shader = new Shader(new SHADER_CLASS() as ByteArray);
            shader.data.src.input = image;
            shader.data.map.input = map;
            shader.data.fader.input = fade;
            shader.data.dy.value = [0];
            shader.data.dx.value = [0];
            shader.data.fadeNear.value = [fadeNear];
            shader.data.fadeDistant.value = [fadeDistant];
            
            var job:ShaderJob = new ShaderJob(shader, bitmapData, w, h);
            job.start(false);
            
            var material:BitmapMaterial = new BitmapMaterial(bitmapData, false);
            material.oneSide = true;
            material.smooth = true;
            return material;
        }
    }
}