much better with Convolution filter :)

On 1/31/06, Mike Mountain <[EMAIL PROTECTED]> wrote:
> OK you'll need a movie 768x768 - copy this code on to frame 1 etc.
>
> with blur filter:
>
> [/as]
> import flash.filters.*;
> import flash.geom.*;
> import flash.display.*;
> //
> //import flash.display.Bitmap;
> var width:Number = 768;
> var height:Number = 768;
> var offScreen1:BitmapData = new BitmapData(width, height, false, 0);
> var onScreen:BitmapData = new BitmapData(width, height, false, 0);
> var zeroPoint:Point = new Point(0, 0);
> var clip:MovieClip = createEmptyMovieClip("clip", 1);
> clip._x = 0;
> clip._y = 0;
> clip.attachBitmap(onScreen, 1);
> // wire the bitmap to the screen
> function RGBtoHEX(r, g, b) {
>         return (r << 16 | g << 8 | b);
> }
> function spectre(angle) {
>         r = (180-angle)/180*Math.PI;
>         var c_r = Math.sin(r++)*127+128 << 16;
>         var c_g = Math.sin(r)*127+128 << 8;
>         var c_b = Math.cos(r--)*127+128;
>         return (c_r | c_g | c_b);
> }
> var filterArray = new Array();
> //var filter:GlowFilter = new GlowFilter(color, alpha, blurX, blurY, 
> strength, quality, inner, knockout);
> //filterArray.push(filter);
> var blurX = 20;
> var blurY = 20;
> var quality = 2;
> var filter = new BlurFilter(blurX, blurY, quality);
> filterArray.push(filter);
> //
> var plug = _root.createEmptyMovieClip('plug', 10);
> plug._y = 200;
> plug._x = 200;
> createEmptyMovieClip('canvas', 200);
> t = 0;
> numsegs = 15;
> segmentLength = 6;
> drawCord = function () {
>         t += 2;
>         lw = Math.sin(t)*100;
>         //trace(lw);
>         a = 100;
>         //trace(a)
>         canvas.clear();
>         var col = spectre(t);
>         canvas.lineStyle(1, col, a);
>         canvas.moveTo(plug._x, plug._y);
>         points[0] = new Object();
>         points[0].x = plug._x;
>         points[0].y = plug._y;
>         var v1 = 1;
>         while (v1<points.length-1) {
>                 v4 = Math.atan2(points[v1].y-points[v1-1].y, 
> points[v1].x-points[v1-1].x);
>                 v3 = points[v1-1].x+(segmentLength)*Math.cos(v4)*2;
>                 v2 = points[v1-1].y+(segmentLength)*Math.sin(v4)*2;
>                 points[v1].x = v3;
>                 points[v1].y = v2;
>                 canvas.lineStyle((points.length-v1)/2, col);
>                 canvas.lineTo(v3, v2);
>                 ++v1;
>         }
>         //(points.length-v1)/2
> };
> var points = new Array();
> var i = 0;
> while (i<numsegs) {
>         points[i] = new Object();
>         points[i].x=5*i, points[i].y=Math.sin(i/20);
>         ++i;
> }
> //drawCord();
> plug.xVel = 10+Math.random()*10;
> plug.yVel = 10+Math.random()*10;
> plug.xmax = Stage.width;
> plug.xmin = 0;
> plug.ymax = Stage.height;
> plug.ymin = 0;
> /*
> var matrixX:Number = 3;
> var matrixY:Number = 3;
> var matrix:Array = [1, 1, 1, 0, 0, 0, 0, 1, 0];
> var divisor:Number = 4;
> */
> //var sfilter:ConvolutionFilter = new ConvolutionFilter(matrixX, matrixY, 
> matrix, divisor);
> var blurX = 10;
> var blurY = 10;
> var quality = 2;
> var sfilter = new BlurFilter(blurX, blurY, quality);
>
> //
> myMatrix = new Matrix();
> translateMatrix = new Matrix();
> degrees = 180;
> radians = (degrees/180)*Math.PI;
> myMatrix.rotate(radians);
> translateMatrix.translate(768, 768);
> myMatrix.concat(translateMatrix);
> myColorTransform = new ColorTransform();
> blendMode = "normal";
> myRectangle = new Rectangle(0, 0, 768, 768);
> smooth = true;
> // sfilter = new BlurFilter(5, 5, 1);
> plug.onEnterFrame = function() {
>         rolldie = Math.random()*100;
>         if (rolldie>97) {
>                 this.xVel = -10+Math.random()*20;
>                 this.yVel = -10+Math.random()*20;
>         }
>         canvas.filters = filterArray;
>         drawCord();
>         copyStage();
>         var nextX = this.xVel+this._x;
>         var nextY = this.yVel+this._y;
>         if (nextX>this.xmax) {
>                 this.xVel = (this.xVel+Math.random()*10)*-1;
>                 nextX = this.xmax-(nextX-this.xmax);
>         } else if (nextX<this.xmin) {
>                 this.xVel = (this.xVel+Math.random()*10)*-1;
>                 nextX = this.xmin+(this.xmin-nextX);
>         }
>         if (nextY>this.ymax) {
>                 this.yVel = (this.yVel+Math.random()*10)*-1;
>                 nextY = this.ymax-(nextY-this.ymax);
>         } else if (nextY<this.ymin) {
>                 this.yVel = (this.yVel+Math.random()*10)*-1;
>                 nextY = this.ymin+(this.ymin-nextY);
>         }
>         this._x = nextX;
>         this._y = nextY;
>         onScreen.copyPixels(offScreen1, offScreen1.rectangle, zeroPoint);
>         onScreen.applyFilter(offScreen1, offScreen1.rectangle, new Point(0, 
> 0), sfilter);
>         offScreen1.draw(_root, myMatrix, myColorTransform, blendMode, 
> myRectangle, smooth);
> };
> [/as]
>
>
> With convolution filter:
>
> [as]
> import flash.filters.*;
> import flash.geom.*;
> import flash.display.*;
> //
> //import flash.display.Bitmap;
> var width:Number = 768;
> var height:Number = 768;
> var offScreen1:BitmapData = new BitmapData(width, height, false, 0);
> var onScreen:BitmapData = new BitmapData(width, height, false, 0);
> var zeroPoint:Point = new Point(0, 0);
> var clip:MovieClip = createEmptyMovieClip("clip", 1);
> clip._x = 0;
> clip._y = 0;
> clip.attachBitmap(onScreen, 1);
> // wire the bitmap to the screen
> function RGBtoHEX(r, g, b) {
>         return (r << 16 | g << 8 | b);
> }
> function spectre(angle) {
>         r = (180-angle)/180*Math.PI;
>         var c_r = Math.sin(r++)*127+128 << 16;
>         var c_g = Math.sin(r)*127+128 << 8;
>         var c_b = Math.cos(r--)*127+128;
>         return (c_r | c_g | c_b);
> }
> var filterArray = new Array();
> //var filter:GlowFilter = new GlowFilter(color, alpha, blurX, blurY, 
> strength, quality, inner, knockout);
> //filterArray.push(filter);
> var blurX = 20;
> var blurY = 20;
> var quality = 2;
> var filter = new BlurFilter(blurX, blurY, quality);
> filterArray.push(filter);
> //
> var plug = _root.createEmptyMovieClip('plug', 10);
> plug._y = 200;
> plug._x = 200;
> createEmptyMovieClip('canvas', 200);
> t = 0;
> numsegs = 15;
> segmentLength = 6;
> drawCord = function () {
>         t += 2;
>         lw = Math.sin(t)*100;
>         //trace(lw);
>         a = 100;
>         //trace(a)
>         canvas.clear();
>         var col = spectre(t);
>         canvas.lineStyle(1, col, a);
>         canvas.moveTo(plug._x, plug._y);
>         points[0] = new Object();
>         points[0].x = plug._x;
>         points[0].y = plug._y;
>         var v1 = 1;
>         while (v1<points.length-1) {
>                 v4 = Math.atan2(points[v1].y-points[v1-1].y, 
> points[v1].x-points[v1-1].x);
>                 v3 = points[v1-1].x+(segmentLength)*Math.cos(v4)*2;
>                 v2 = points[v1-1].y+(segmentLength)*Math.sin(v4)*2;
>                 points[v1].x = v3;
>                 points[v1].y = v2;
>                 canvas.lineStyle((points.length-v1)/2, col);
>                 canvas.lineTo(v3, v2);
>                 ++v1;
>         }
>         //(points.length-v1)/2
> };
> var points = new Array();
> var i = 0;
> while (i<numsegs) {
>         points[i] = new Object();
>         points[i].x=5*i, points[i].y=Math.sin(i/20);
>         ++i;
> }
> //drawCord();
> plug.xVel = 10+Math.random()*10;
> plug.yVel = 10+Math.random()*10;
> plug.xmax = Stage.width;
> plug.xmin = 0;
> plug.ymax = Stage.height;
> plug.ymin = 0;
>
> var matrixX:Number = 3;
> var matrixY:Number = 3;
> var matrix:Array = [1, 1, 1, 0, 0, 0, 0, 1, 0];
> var divisor:Number = 4;
> var sfilter:ConvolutionFilter = new ConvolutionFilter(matrixX, matrixY, 
> matrix, divisor);
> /*
> var blurX = 10;
> var blurY = 10;
> var quality = 2;
> var sfilter = new BlurFilter(blurX, blurY, quality);
> */
> //
> myMatrix = new Matrix();
> translateMatrix = new Matrix();
> degrees = 180;
> radians = (degrees/180)*Math.PI;
> myMatrix.rotate(radians);
> translateMatrix.translate(768, 768);
> myMatrix.concat(translateMatrix);
> myColorTransform = new ColorTransform();
> blendMode = "normal";
> myRectangle = new Rectangle(0, 0, 768, 768);
> smooth = true;
> // sfilter = new BlurFilter(5, 5, 1);
> plug.onEnterFrame = function() {
>         rolldie = Math.random()*100;
>         if (rolldie>97) {
>                 this.xVel = -10+Math.random()*20;
>                 this.yVel = -10+Math.random()*20;
>         }
>         canvas.filters = filterArray;
>         drawCord();
>         copyStage();
>         var nextX = this.xVel+this._x;
>         var nextY = this.yVel+this._y;
>         if (nextX>this.xmax) {
>                 this.xVel = (this.xVel+Math.random()*10)*-1;
>                 nextX = this.xmax-(nextX-this.xmax);
>         } else if (nextX<this.xmin) {
>                 this.xVel = (this.xVel+Math.random()*10)*-1;
>                 nextX = this.xmin+(this.xmin-nextX);
>         }
>         if (nextY>this.ymax) {
>                 this.yVel = (this.yVel+Math.random()*10)*-1;
>                 nextY = this.ymax-(nextY-this.ymax);
>         } else if (nextY<this.ymin) {
>                 this.yVel = (this.yVel+Math.random()*10)*-1;
>                 nextY = this.ymin+(this.ymin-nextY);
>         }
>         this._x = nextX;
>         this._y = nextY;
>         onScreen.copyPixels(offScreen1, offScreen1.rectangle, zeroPoint);
>         onScreen.applyFilter(offScreen1, offScreen1.rectangle, new Point(0, 
> 0), sfilter);
>         offScreen1.draw(_root, myMatrix, myColorTransform, blendMode, 
> myRectangle, smooth);
> };
> [/as]
>
> Although it may be something to do with the application of the filter....
>
> Scuse the dodgy code - WIP.
>
> M
>
>
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED] On Behalf
> > Of Mike Duguid
> > Sent: 30 January 2006 22:44
> > To: Flashcoders mailing list
> > Subject: Re: [Flashcoders] ConvolutionFilter performance
> >
> > Mike, do you have an example of this? My current test shows
> > the opposite - that convolution is proving more cpu intensive
> > than blurfilter?
> >
> >
> > > Mike Mountain  <[EMAIL PROTECTED]> wrote:
> > > In my tests convolution filter was much faster than a blurfilter.
> > > But it's an easy one to swap oout and test for yourself...
> >
> >
> > > Andreas Rønning <[EMAIL PROTECTED]> wrote:
> > > Does anyone know which is faster; a blurring one-pass convolution
> > > filter or a blurfilter? Or are they just 2 sides to the
> > same story? I
> > > need a high performance blur operation for depth of field..
> > >
> > > Cheers,
> > >
> > > - Andreas
> > _______________________________________________
> > Flashcoders mailing list
> > Flashcoders@chattyfig.figleaf.com
> > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
> >
> _______________________________________________
> Flashcoders mailing list
> Flashcoders@chattyfig.figleaf.com
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>


--
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Franto

http://blog.franto.com
http://www.flashcoders.sk
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to