I had been messing around with creating a platform for experimenting with extended rules for “life-like-automata”, and although the code seemed to work just allright. I was horrible slow at rendering, and I decided that the next step were to optimize the rendering / drawing.
Well one thing lead to another – and i decided to make a small applet, were the drawing routines were optimized. Using a bufferedImage and setting the pixels one by one. And then I found this cool algorithm, for 2d water (Link).
It simulates water rippling, by using to buffer arrays with heights, and using them to calculate the speed and hence the distribution of ripples. There are a nice description of the algorithm at the link mentioned above. The short story is that you get an heightmap, and are able to calculate the next iteration of heights using the last height map, then you switch the buffers and repeat the procedure. And in between you render the heightmap. Unfortunately I’m not familiar with any algorithms for shading an refraction, so i just draw the heights using a simple gradient.
But the effect is really nice anyway. I didn’t include the applet in this page, as it cpu-intensive. It iterates through every pixel at each iteration, and just keeps on iterating. the nice thing about it, is that the speed doesn’t depend on how many ripples / activity there is.