WebCamera与MetaBall构造的水

Metaball everyinch 5673℃ 0评论

本示例演示了在WebCamera视频表面浮现一层水的效果,水的游动与融合使用Metaball方式构建
源代码:WebCamera_Drip

1package{
2    import com.quasimondo.bitmapdata.CameraBitmap;
3     
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;
16     
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);
23         
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);
29         
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;
35         
36        private var shifts:Array = [new Point(1,1),new Point(3,3)];
37         
38        public function WebCamera_Drip(){
39            camera = new CameraBitmap(w,h,25,true);
40            addChild(new Bitmap(camera.bitmapData));
41             
42            bevel = new BevelFilter();
43            bevel.blurX = 20;
44            bevel.blurY = 20;
45            bevel.distance = 10;
46            bevel.highlightColor = 0xFFFFFF;
47            bevel.shadowColor = 0xFFFFFF;
48            bevel.shadowAlpha = 0.35;
49             
50            blur = new BlurFilter(2,2,2);
51             
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);
54             
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);
58            addChild(bmp);
59            addEventListener(Event.ENTER_FRAME,onEnterframe);
60        }
61         
62        private function onEnterframe(e:Event):void{
63            shifts[0].y = shifts[0].y - 1;
64            shifts[1].y = shifts[1].y - 2;
65            bmpd.lock();
66            // 使用PerlinNoise生成噪波
67            perlinMap.perlinNoise(105,105,2,0,false,true,7,true,shifts);
68            // 将噪波中大于140/255*0xFFFFFF的颜色调成0xFFFF8000(品色)
69            blobMap.fillRect(rect,0x000000);
70            blobMap.threshold(perlinMap,rect,pt,">",140/255*0xFFFFFF,0xFFFF8000,0xFFFFFF,false);
71            // 复制原始的bmp和camera的内容
72            bmpd.draw(bmp);
73            bmpd.copyPixels(camera.bitmapData,bmpd.rect,pt);
74            bmpd.applyFilter(bmpd,bmpd.rect,pt,dmf);
75            bmpd.applyFilter(bmpd,bmpd.rect,pt,blur);
76            // 使用blobMap的Alpha通道替换bmpd中的alpha通道
77            bmpd.copyChannel(blobMap,blobMap.rect,pt,BitmapDataChannel.ALPHA,BitmapDataChannel.ALPHA);
78        }
79    }
80}

分享&收藏

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

喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 代码简洁清楚,向你学习,加你qq了
    清澄若水2014-01-21 20:31 回复
'; } if( dopt('d_footcode_b') ) echo dopt('d_footcode'); ?>