Water Simulation

Its been a while since my last post, had been busy with office work…sigh!!!

Anyways, I was poking around web to come up with interesting water simulation techniques, as you could see in many games these days, so I did find a reference to an old C-based technique, after little refinement, what I have is a water simulation which uses a very old algorithm based on two heightmaps.

As always it’s a  grid based animation which divides the screen into  a mesh(more slices better this simulation looks), I use a jagged array in c# to do this (load it with a texture of 640 X 480 dimension ), to animate I use another array of same dimensions, now to make every thing move I kinda do something like this

          
               for (int y = 1; y < 479; y++) {
                    for (int x = 1; x < 639; x++) {
                        this.currentState[x, y] = ((this.oldState[(x - 1), y] + this.oldState[(x + 1), y] + this.oldState[x, (y + 1)] + this.oldState[x, (y - 1)] >> 1) - this.currentState[x, y]);
                        this.currentState[x, y] -= (this.currentState[x, y] >> 7);
                        int data = (short)(1024 - this.currentState[x, y]);
                        int a = (x - 640) * data / 1024 + 640;
                        int b = (y - 480) * data / 1024 + 480;
                        if (a >= 640) a = 639;
                        if (a < 0) a = 0;
                        if (b >= 480) b = 479;
                        if (b < 0) b = 0;
                        int textOffset = x + y * 640;
                        bmp.Pixels[textOffset] = texture[(a + b * 640)];
                    } 
                }
       
        

The choice of display entity(acting as viewport and display canvas) is WritableBitmap,  and rest is pretty much fun to play.

Click here to watch demo