CGArt-中国CGer中的绿色家园
首页 信息动态 原创排行 互动教程 资源千寻 CG人才 CGArt杂志 艺术设计 CG画廊 CG论坛 酷站欣赏 CG搜索 会员中心
使用BitmapData作为Accumulate Buffer使用
来源:闪吧 作者:guruqu 编辑:浪漫的季节 发布时间:2007年04月09日 16:51:24

今天把这个帖子编辑一下吧。还是老样子,我先稍微讲讲什么叫做Accumulate Buffer以及如何用Flash实现这个东西并且达到效果。
一 . Accumulate Buffer: 其实是在图形处理中用的非常多的一中缓存,它负责将帧渲染之后进行保存,并在以后的处理中反复使用。它可以实现诸如 motion blur(动态模糊)、anti-alias(抗锯齿)等很玄的效果。这个介绍构简单吧。

二. 切入正题,咱们用Flash 8.0来模仿Accumulate Buffer来实现一下很帅的blur效果吧,最后效果看上去可以像media player里面的视觉效果一样哦!下面跟着我做。

1. 新建一个Flash文档,随便起个名字。
2. 在舞台上面随便做一个会动的MovieClip,最好简单点,我们就可以继续了,这里我用了几个简单的补间做了一个运动的棍子。
3. 回到最外层,给这个movieClip起名stick,然后新建一层,在新建的层的第一帧写入actionScript,  stick._visible=false;  因为我们不想让球直接渲染到画面而是让他进入Accumulate Buffer,完成之后因该是这个样子 [step1]
4. ctr+enter,测试一下,我们应该看不到那只球。好,然后在ball._visible=false;下面开始我们的正文。

使用BitmapData作为Accumulate Buffer使用

5. 在ball._visible=false那一段补充为:

import flash.display.BitmapData;
import flash.geom.*;
import flash.filters.*;

stick._visible=false;
var accumulateBuffer = new BitmapData(550,400,false,0xff000000);//使用这些参数创建一个BitmapData对象
attachBitmap(accumulateBuffer,1);//将accumulateBuffer放到舞台上,不然我们怎么能够看到效果呢

function onEnterFrame(){
accumulateBuffer.draw(stick);//每到一帧将目标movieClip画到accumulateBuffer上。
}

好啦,我们的第一步完成啦,Ctrl+Enter测试,我们已经可以看到一个MovieClip被连续画到一个AccumulateBuffer上的样子了。恩...只是不怎么好看,下面是完成了第一步的源文件:

有了基础,下面我们拿AccumulateBuffer来一展身手!!我们来实现一个让画面渐渐模糊的效果。将那段ActionScript加入四行改变为:
import flash.display.BitmapData;
import flash.geom.*;
import flash.filters.*;
stick._visible=false;
var accumulateBuffer = new BitmapData(550,400,false,0xff000000);
var tempBuffer = new BitmapData(550,400,false,0xff000000); //创建另一个BitmapData用作模糊处理的缓存
var blurFilter = new BlurFilter(2,2,1); //建立一个让图面模糊的滤镜
attachBitmap(accumulateBuffer,1);
function onEnterFrame(){
tempBuffer.draw(accumulateBuffer);//将AccumulateBuffer画到tmpBuffer上准备进行模糊处理
accumulateBuffer.applyFilter(tempBuffer,tempBuffer.rectangle,new Point(),blurFilter);//将模糊处理后的图象写回accumulatBuffer
accumulateBuffer.draw(stick);
}

完成这些工作后的源文件:

好啦,大家测试一下,是不是有种延误飘散的感觉了阿?其实AccumulateBuffer还有很多用法,这里就不一一例举了。下面是我做的一些使用BitmapData做AccumulateBuffer的效果。
使用ac buffer执行外部MC:

使用BitmapData作为Accumulate Buffer使用

共有评论0条
更多评论..
作者信息 详细信息
评论人:
验证码:
内容:
 
about us advertisement publish conformity service cooperate associate link site map contact us help jump to the top of page