作者 主题: 用processing实现经典的水波效果  (阅读 8930 次)

vinjn

  • SuperManager
  • Hero Member
  • *****
  • 帖子: 586
用processing实现经典的水波效果
« 于: 十一月 01, 2011, 01:05:14 下午 »


附件中的完整工程包含下面的代码以及图片一张

程序代码
int Width = 800;
int Height = 600;
int FullSize = 0;
int Spacing = 10;

int[] source, dest;
PImage bg;

void setup()
{
  bg = loadImage("terminator_2.jpg");
  Width = bg.width;
  Height = bg.height;
  FullSize = Width * Height;
  size(Width, Height);
  source = new int[FullSize];
  dest = new int[FullSize];
  for (int i=0; i< FullSize; i++)
    source[i] = dest[i] = 0;
}

void draw()
{
  if (mousePressed)
  {
    if (mouseX > 0 && mouseX < Width && mouseY > 0 && mouseY < Height)
      source[mouseY*Width+mouseX] = (int)random(100, 5000);
  }
  for (int i=Width; i< FullSize-Width; i++)
  {
    // check for bounds
    int xi = i % Width;
    if ((xi==0) || (xi==Width-1)) continue;

    dest[i] = (
    ((source[i-1]+
      source[i+1]+
      source[i-Width]+
      source[i+Width]) >>1) ) -dest[i];

    dest[i] -= (dest[i] >> 5); // Damping - Quick divde by 32 (5 bits)
  }

  //image(bg, 0, 0);
  loadPixels();
  for (int i=Width; i< FullSize-Width; i++)
  {
    // check for bounds
    int xi = i % Width;
    if ((xi==0) || (xi==Width-1)) continue;

    int xoffset = dest[i-1] - dest[i+1];
    int yoffset = dest[i-Width] - dest[i+Width];

    int offset = i+xoffset+yoffset*Width;
    if (offset>0 && offset<FullSize)
      pixels[i] = bg.pixels[offset];
  }
  //bg.updatePixels();
  updatePixels();

  //swap
  int[] temp = source;
  source = dest;
  dest = temp;
}
« 最后编辑时间: 十一月 01, 2011, 01:07:17 下午 作者 vinjn »

cs7258

  • Newbie
  • *
  • 帖子: 6
Re: 用processing实现经典的水波效果
« 回复 #1 于: 十一月 01, 2011, 01:16:31 下午 »
好东西学习下,as的水波很多,p5的这样效果少见

vinjn

  • SuperManager
  • Hero Member
  • *****
  • 帖子: 586
Re: 用processing实现经典的水波效果
« 回复 #2 于: 十一月 01, 2011, 01:21:02 下午 »
原理都是一模一样的
是从as的例子移植的

herohezi

  • Newbie
  • *
  • 帖子: 6
Re: 用processing实现经典的水波效果
« 回复 #3 于: 二月 25, 2012, 09:14:44 上午 »
thanks in advance for your help

George

  • Newbie
  • *
  • 帖子: 9
Re: 用processing实现经典的水波效果
« 回复 #4 于: 二月 25, 2012, 03:36:21 下午 »
不错~!VJ就是喜欢折腾啊~!

慕容苏媛

  • Newbie
  • *
  • 帖子: 2
Re: 用processing实现经典的水波效果
« 回复 #5 于: 二月 28, 2012, 11:42:14 下午 »
那个我是新手,就是这个程序我试的时候是显示出错的。。不懂所以想问下。。谢谢啊

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: 用processing实现经典的水波效果
« 回复 #6 于: 二月 28, 2012, 11:45:27 下午 »
@慕容苏媛

变量未声明。变量与系统变量重名。变量首字母不宜大写。

vinjn

  • SuperManager
  • Hero Member
  • *****
  • 帖子: 586
Re: 用processing实现经典的水波效果
« 回复 #7 于: 二月 29, 2012, 10:19:04 上午 »
那个我是新手,就是这个程序我试的时候是显示出错的。。不懂所以想问下。。谢谢啊

代码你都不读一下就运行啊?没用过loadImage么?
缺少图片啊朋友
请下载附件,而不是直接运行代码,我帖子第一句话就写清楚了,怎么都不看一下的


RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: 用processing实现经典的水波效果
« 回复 #8 于: 二月 29, 2012, 09:53:17 下午 »
@vinjn

原来能直接用Width,Height 指定。。。。。。- -

慕容苏媛

  • Newbie
  • *
  • 帖子: 2
Re: 用processing实现经典的水波效果
« 回复 #9 于: 三月 02, 2012, 10:41:43 上午 »
我错了。。。能不能问下,假如我用processing编程画了一个圆,我要是想用Arduino 双轴按键摇杆通过arduino控制processing窗口内的圆移动要怎么编啊。。万分感谢。。求助。。。

Tags: ripple processing