Ripple [水波] 程序实现水波效果 水纹特效 算法

您所在的位置:网站首页 3dmax怎么做一圈一圈的水波 Ripple [水波] 程序实现水波效果 水纹特效 算法

Ripple [水波] 程序实现水波效果 水纹特效 算法

#Ripple [水波] 程序实现水波效果 水纹特效 算法| 来源: 网络整理| 查看: 265

看到左边这幅动画

(如果没有出现,请耐心的稍等片刻)

,你也许不会相信它其实是

用电脑做出来的,这就是

水波

特效的魅力所在。

 

在介绍编程之前,先让我们来回顾一下在高中的物理课上我们所学的关于水波的知识。

 

水波有如下几个特性:

 

 

扩散

:当你投一块石头到水中,你会看到一个以石头入水点为圆心所形成的一圈圈的水

波,这里,你可能会被这个现象所误导,以为水波上的每一点都是以石头入水点为中心

向外扩散的,这是错误的。实际上,

水波上的任何一点在任何时候都是以自己为圆心向

四周扩散

的,之所以会形成一个环状的水波,是因为水波的内部因为扩散的对称而相互

抵消了。

 

 

 

衰减

:因为水是有阻尼的,否则,当你在水池中投入石头,水波就会永不停止的震荡下

去。

 

 

 

水的折射

:因为水波上不同地点的倾斜角度不同,所以,因为水的折射,我们从观察点

垂直往下看到的水底并不是在观察点的正下方,而有一定的偏移。

如果不考虑水面上部

的光线反射,这就是我们能感觉到水波形状的原因

 

 

 

反射

:水波遇到障碍物会反射。

 

 

 

衍射

:忽然又想到这一点,但是在程序里却看不到,如果能在水池中央放上一块礁石,

或放一个中间有缝的隔板,那么就能看到水波的衍射现象了。

 

 

好了,有了这几个特性,再运用数学和几何知识,我们就可以模拟出真实的水波了。但是,如果

你曾用

3DMax

做过水波的动画,你就会知道要渲染出一幅真实形状的水波画面少说也得好几十

秒,

而我们现在需要的是实时的渲染,

每秒种至少也得渲染

20

帧才能使得水波得以平滑的显示。

考虑到电脑运算的速度,

我们不可能按照正弦函数或精确的公式来构造水波,

不能用乘除法,

不能用

sin

cos

,只能用一种取近似值的快速算法,尽管这种算法存在一定误差,但是为了满足

实时动画的要求,我们不得不这样做。

 

首先我们要建立两个与水池图象一样大小的数组

buf1[PoolWidth*PoolHeight]

buf2[PoolWidth*PoolHeight]

PoolWidth=

水池图象的象素宽度、

PoolHeight=

水池图象的

象素高度)

用来保存水面上每一个点的前一时刻和后一时刻波幅数据,

因为波幅也就代表了波

的能量,

所以以后我们称这两个数组为波能缓冲区。

水面在初始状态时是一个平面,

各点的波幅

都为

0

,所以,这两个数组的初始值都等于

0

 

下面来推导计算波幅的公式



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3