2D特效之水波_第1页
2D特效之水波_第2页
2D特效之水波_第3页
2D特效之水波_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2D特效之水波水波特效在游戏当中也比较多见,波纹实时生成算法很多,这里介绍一种 快速算法。之所以说它是一种快速算法,是因为它的计算既没有用到sin、cos函数也没有用到 sin、cos 函数的查表算法,它只是根据波的传播原理,通过少 量的加减、位移运算来完成。如要多了解一些波的知识,赶快去翻书哦,现在 去学或复习还来得及。当然快速的代价是内存的消耗,这一点我们曾在文章里 也提到过,为了追求更高的效率,往往可采取牺牲部分内存这样一种手段来达 到目的。在开始之前我们先作一些假设,同时你可参考左面的图。首先假设波是从 右往左传播, 0为波在当前时刻的波形, 1为前 1/8周期时的波形, 2为前 1/

2、4 周期时的波形。设波的周期为 T。图中向下的箭头是各点处的振动速度,箭头线 长表示振动速度的大小。现设有任一点x(丫方向暂不考虑),它在三个波形上分别对应点 PO、P1 和P2,三点在振幅方向的偏移量(含方向)分别为DO、D1和D2。设波形函数为 DO =sin(2*Pi/T*t+b),贝S D1 = sin(2*Pi/T*(t-T/8)+b), D2 = sin(2*Pi/T*(t-T/4)+b),我 们下面来证明 21/2*D1 = DO+D2:设 2*Pi/T+b=a,则DO = sin(a), D1=sin(a-Pi/4), D2 = sin(a-Pi/2) =DO+D2 = sin

3、(a)+sin(a-Pi/2)=2*sin(a+(a-Pi/2)/2)*cos(a-(a-Pi/2)/2)=2*sin(a-Pi/4)*cos(pi/4)=21/2*D1利用这一特征我们就可以来计算波形了,我们可以以 1/8个周期为一显示 帧,然后用两个缓冲区来保留前两帧的波形,用上述公式就可以依次推算出后 续波的波形。这里需要做一些优化,首先将 21/2放大为2,则有D0=2*D1-D2,计算后的 DO会偏大一些(相当于波能加大),这样的波会越振越厉害,不停地振动下去 永不止,所以要将DO的值减少一部分,办法是减去1/n个DO,将n值取成2 的5(或其它?)次方,这样就可以用移位来计算:D0

4、-=D05最后要处理的是 波的传播了,一般我们在某一点给出一个干扰源(波源),这一点的能量要向 四周传播出去我们才能看出波的抖动,否则光一个点上下抖动看起来是不会象 水波的,我们用平均算法来传递波能,每一点的波形都是其前后左右各点的平 均值。如右图,若蓝点是波源,则它由绿、黄、红依次向外传播,各位注意不 要被此图所误导,波形绝不是如图示那样呈菱形向外传播,这个图只不过是为 了说明波的传播次序,因为即使是颜色相同的点其能量(或者说偏移 )都不会是相同的。由上面所分析我们有如下的波传播代码:void CWaterApp:RippleSpread()/ m_buf1 is the previous

5、frame,/ and m_buf2 is the frame before thatint i;for (i=32O; i1) - m_buf2i;/ Energy dampingm_buf2i -= m_buf2i5;/ Swap m_buf1 and m_buf2short *ptmp = m_buf1;m_buf1 = m_buf2;m_buf2 = ptmp;最后一步就是根据计算出来的波形做渲染了,我们可以随便选一幅位图来 作为我们的渲当背景 (纹理 )。由于我们的缓冲区是各点的偏移 (偏离水平面的高 度),所以我们可以将当前点前后和左右两个落差作为光折射后的偏移量来计算 光的折射。

6、为了让纹理图看起来更象水,可将图的蓝色加深。代码如下:void CWaterApp:RenderRipple()DDSURFACEDESC2 ddsd, ddsd1;ddsd.dwSize = sizeof (DDSURFACEDESC2);m_pTexture-Lock(&ddsd);ddsd1.dwSize = sizeof(DDSURFACEDESC2);m_pRender-Lock(&ddsd1);DWORD dwPixel;int xoff, yoff;int k = 320;for (int i=1; i199; i+)for (int j=0; jGetPixel(&ddsd, 160+j+xoff, 140+i+yoff);/ do shadingint p = dwPixel & 0x1F;p += xoff;if (p31) p = 31;if (pPutPixel(&ddsd1, j, i, dwPixel); k+;m_pTexture

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论