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