本示例演示了在WebCamera视频表面浮现一层水的效果,水的游动与融合使用Metaball方式构建
源代码:WebCamera_Drip
2 | import com.quasimondo.bitmapdata.CameraBitmap; |
4 | import flash.display.Bitmap; |
5 | import flash.display.BitmapData; |
6 | import flash.display.BitmapDataChannel; |
7 | import flash.display.Sprite; |
8 | import flash.events.Event; |
9 | import flash.filters.BevelFilter; |
10 | import flash.filters.BlurFilter; |
11 | import flash.filters.DisplacementMapFilter; |
12 | import flash.filters.DisplacementMapFilterMode; |
13 | import flash.filters.DropShadowFilter; |
14 | import flash.geom.Point; |
15 | import flash.geom.Rectangle; |
17 | [SWF(width= "400" ,height= "300" ,frameRate= "31" ,backgroundColor= "0xffffff" )] |
18 | public class WebCamera_Drip extends Sprite{ |
19 | private var w: Number = 400 ; |
20 | private var h: Number = 300 ; |
21 | private var pt:Point = new Point( 0 , 0 ); |
22 | private var rect:Rectangle = new Rectangle( 0 , 0 ,w,h); |
24 | private var camera:CameraBitmap; |
25 | private var bmp:Bitmap; |
26 | private var bmpd:BitmapData = new BitmapData(w,h, true , 0xFFFFFF ); |
27 | private var perlinMap:BitmapData = new BitmapData(w,h); |
28 | private var blobMap:BitmapData = new BitmapData(w,h); |
30 | private var darken:DropShadowFilter; |
31 | private var lighten:DropShadowFilter; |
32 | private var dmf:DisplacementMapFilter; |
33 | private var blur:BlurFilter; |
34 | private var bevel:BevelFilter; |
36 | private var shifts: Array = [ new Point( 1 , 1 ), new Point( 3 , 3 )]; |
38 | public function WebCamera_Drip(){ |
39 | camera = new CameraBitmap(w,h, 25 , true ); |
40 | addChild( new Bitmap(camera.bitmapData)); |
42 | bevel = new BevelFilter(); |
46 | bevel.highlightColor = 0xFFFFFF ; |
47 | bevel.shadowColor = 0xFFFFFF ; |
48 | bevel.shadowAlpha = 0.35 ; |
50 | blur = new BlurFilter( 2 , 2 , 2 ); |
52 | lighten = new DropShadowFilter( 4 , 250 , 0xFFFFFF , 0.95 , 4 , 4 , 1 , 1 , false , false , false ); |
53 | darken = new DropShadowFilter( 4 , 25 , 0x000000 , 0.25 , 4 , 4 , 1 , 1 , false , false , false ); |
55 | bmp = new Bitmap(bmpd); |
56 | bmp.filters = [blur,bevel,lighten,darken]; |
57 | dmf = new DisplacementMapFilter(perlinMap,pt, 1 , 2 , 40 , 40 ,DisplacementMapFilterMode.CLAMP, 0 ); |
59 | addEventListener(Event.ENTER_FRAME,onEnterframe); |
62 | private function onEnterframe(e:Event): void { |
63 | shifts[ 0 ].y = shifts[ 0 ].y - 1 ; |
64 | shifts[ 1 ].y = shifts[ 1 ].y - 2 ; |
67 | perlinMap.perlinNoise( 105 , 105 , 2 , 0 , false , true , 7 , true ,shifts); |
69 | blobMap.fillRect(rect, 0x000000 ); |
70 | blobMap.threshold(perlinMap,rect,pt, ">" , 140 / 255 * 0xFFFFFF , 0xFFFF8000 , 0xFFFFFF , false ); |
73 | bmpd.copyPixels(camera.bitmapData,bmpd.rect,pt); |
74 | bmpd.applyFilter(bmpd,bmpd.rect,pt,dmf); |
75 | bmpd.applyFilter(bmpd,bmpd.rect,pt,blur); |
77 | bmpd.copyChannel(blobMap,blobMap.rect,pt,BitmapDataChannel.ALPHA,BitmapDataChannel.ALPHA); |

转载请注明:陈童的博客 » WebCamera与MetaBall构造的水