Archive for the ‘Animation’ Category

Drawing rabbits with WPF pixel shaders

Tuesday, September 15th, 2009


crossposted on labs.boulevart.be

I’m a big fan of writeable bitmaps.
When drawing more then 1000 items on screen writeable bitmaps performs a zillion times better then individual objects.
Based on WriteableBitmap Class MSDN sample it’s peanuts creating a fullscreen drawing application.
After modifying DirectionalBlur shader from the WPFFX I got the this little drawing app.

The above demo was done on a MSI windtop touchscreen (dual core 1.5Ghz Atom CPU)

download

Use M to (de)activate the mouse.
Use F to toggle fullscreen.
Use ESC to exit the application.

Silverlight 3 RTW Writeable bitmap changes

Wednesday, July 15th, 2009

With the official release of Silverlight 3 RTW I received some feedback that my plasma sample wasn’t working anymore.
The problem occurs in some small changes in the Writeable bitmap api.
The official MS change document talks about the new constructor and the lock methods.

3.19 WriteableBitmap changes

The PixelFormat parameter for the WriteableBitmap constructor has been removed. WriteableBitmap(int pixelWidth, int pixelHeight, PixelFormat format) is now WriteableBitmap(int pixelWidth, int pixelHeight).

The only supported PixelFormat is now Pbgra32.

Similarly, the PixelFormat and PixelFormats type has been removed.Lock() and Unlock() have been removed.

But that’s not the only thing.
From now on you have to use the pixels property to write or read pixels.

I updated my previous sample and code.

Silverlight 3 Writeable Bitmap API - Plasma

Thursday, June 4th, 2009

plasma

Updated on 15/07/2009 to Silverlight 3 RTW

Inspired by old school MS DOS demos and this Flash Alchemy experiment.
Found out that someone already ported some code from the Alchemy experiment to C#.
So after some tweaking and some help of my colleague Frederik it’s up and running in Silverlight 3 beta.

I’m using two threads to speed up the plasma calculation when moving the dots, since everybody has a duo,triple,quad,octa … core CPU these days,
One thread does even lines and the other odd lines (interlacing).

 public static void GeneratePlasmaEvenLines()
     {
       int index = 0;

       for (var x = 0; x < width; x +=2)
       {
         for (var y = 0; y < height ; y+=1)
         {
           uint color = CalculatePixel(x, y);
           plasma[index++] = color % 255;
         }
         index += width;
       }
     }

     public static void GeneratePlasmaOddLines()
     {
         int index = width;
         for (var x = 1; x < width; x+=2)
         {
             for (var y = 0; y < height; y+=1)
             {
                 uint color = CalculatePixel(x, y);
                 plasma[index++] = color % 255;
             }
             index += height;
         }
     }

  private static uint CalculatePixel(int x, int y)
     {
         int w = (int) param6;
         int h = (int)param5;
         uint color = (uint)
        (
              128.0 + (param3 * Math.Sin(x / param1))
            + 128.0 + (param4 * Math.Sin(y / param2))
            + 128.0 + ((param5/4) * Math.Sin(Math.Sqrt((double)((x - w)* (x - w) + (y - h ) * (y - h))) / 9.0))
            + 128.0 + ((param6/4)* Math.Sin(Math.Sqrt((double)(x * x + y * y)) / 9.0))
        ) / 4;

         // Add shift position to sync the color
         color +=  LastShift;
         return color;
     }

Placing the pixels on the canvas with the our brand new bitmap api

private void BuildBitmap(uint[] data)
        {
            uint colorValue=0;
                for (int x = 0; x < imageWidth; x++)
                {
                    for (int y = 0; y < imageHeight; y++)
                    {
                        // set the pixel value
                        int palletIndex = (int)data[y * imageWidth + x];
                        colorValue = GeneratePlasma.palette[palletIndex];
                        writeableBitmap.Pixels[y * imageWidth + x] = (int)colorValue;
                    }
                }

            writeableBitmap.Invalidate();
            btImage.Source = writeableBitmap;
            GC.Collect();
        }

To view the full code download the project below.

Silverlight 3 is required

demodownload

Jungle Fever

Tuesday, May 5th, 2009

screenshot-with-banner-449


It’s finally finished, my first Silverlight mini game.
In exception from the title image it’s 100% XAML.
All graphics done in MS Expression Design.

Had some small problems in blend, everything else was pretty straightforward.
If you have a background in .NET programming the transition will be smooth.

Enjoy !

Easing in C# Storyboards

Saturday, March 14th, 2009


Doing easing in and out in blend is pretty straightforward.
Creating that same storyboard in C# is just a mater of syntax.
(more…)

Drag and drop & scripted storyboard fun

Saturday, July 5th, 2008

This is a sample I created during a Silverlight course.
The goal was to create some custom buttons.
Since that’s no rocket science I added some scripted storyboards and drag and drop controls.

If someone is interested, here is the source

download


lab101 is proudly powered by WordPress
Content and design by Kris Meeusen
Entries (RSS) and Comments (RSS).