Frank La Vigne

Fear and Loathing in .NET

Subscription Options

Blog
Add to Google

Subscribe in Bloglines
Subscribe in NewsGator Online
Add Frank La Vigne to Newsburst from CNET News.com

Subscribe in Rojo
Podcast
Subscribe in podnova
Add Frank La Vigne to ODEO

My Links

News






Post Categories

Archives

Image Galleries

Blog Stats

Blog Roll

Favorite Sites

Gadget Blogs

Tablet PC Links

Swift3D and Silverlight

I've done a lot of work with Swift 3D in the past. [Sample 1 | Sample 2 | Sample 3 ]

Swift 3D is a 3D rendering environment for Flash that's been around for about eight years.

Now that version 5 includes Silverlight and WPF support, I decided it was time to take another look at the tool.

Check out this sample animation.

The tool works by rendering out each frame of a 3D animation into a vector graphic.

Here's an example of such a frame.

   1: <Canvas x:Name="Canvas0" Width="400" Height="300" Opacity="0">
   2:     <Path Data="F1 M 84.25,85.25 L 176,70.75 L 318.5,106.75 L 207.25,132.75 L 84.25,85.25">
   3:         <Path.Fill>
   4:             <SolidColorBrush Color="#E9E3C5" Opacity="1"/>
   5:         Path.Fill>
   6:     Path>
   7:     <Path Data="F1 M 84.25,85.25 L 207.25,132.75 L 211.75,269 L 94.5,185.25 L 87,117 L 84,88.5 L 84.25,85.25">
   8:         <Path.Fill>
   9:             <SolidColorBrush Color="#827B6B" Opacity="1"/>
  10:         Path.Fill>
  11:     Path>
  12:     <Path Data="F1 M 318.5,106.75 L 314.75,228.75 L 224,264.75 L 211.75,269 L 207.25,132.75 L 318.5,106.75">
  13:         <Path.Fill>
  14:             <SolidColorBrush Color="#6D6759" Opacity="1"/>
  15:         Path.Fill>
  16:     Path>
  17: Canvas>

All the frames are stitched together by a StoryBoard that changes the opacity to 1 from 0 in a timely manner.

   1: <Storyboard RepeatBehavior="Forever" FillBehavior="HoldEnd" BeginTime="0:0:0">
   2:     <DoubleAnimation Storyboard.TargetName="Canvas0" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0" Duration="0:0:0.0833333" FillBehavior="Stop"/>
   3:     <DoubleAnimation Storyboard.TargetName="Canvas1" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.0833333" Duration="0:0:0.0833333" FillBehavior="Stop"/>
   4:     <DoubleAnimation Storyboard.TargetName="Canvas2" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.166667" Duration="0:0:0.0833333" FillBehavior="Stop"/>
   5:     <DoubleAnimation Storyboard.TargetName="Canvas3" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.25" Duration="0:0:0.0833333" FillBehavior="Stop"/>
   6:     <DoubleAnimation Storyboard.TargetName="Canvas4" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.333333" Duration="0:0:0.0833333" FillBehavior="Stop"/>
   7:     <DoubleAnimation Storyboard.TargetName="Canvas5" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.416667" Duration="0:0:0.0833333" FillBehavior="Stop"/>
   8:     <DoubleAnimation Storyboard.TargetName="Canvas6" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.5" Duration="0:0:0.0833333" FillBehavior="Stop"/>
   9:     <DoubleAnimation Storyboard.TargetName="Canvas7" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.583333" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  10:     <DoubleAnimation Storyboard.TargetName="Canvas8" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.666667" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  11:     <DoubleAnimation Storyboard.TargetName="Canvas9" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.75" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  12:     <DoubleAnimation Storyboard.TargetName="Canvas10" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.833333" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  13:     <DoubleAnimation Storyboard.TargetName="Canvas11" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:0.916667" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  14:     <DoubleAnimation Storyboard.TargetName="Canvas12" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:1" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  15:     <DoubleAnimation Storyboard.TargetName="Canvas13" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:1.08333" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  16:     <DoubleAnimation Storyboard.TargetName="Canvas14" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:1.16667" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  17:     <DoubleAnimation Storyboard.TargetName="Canvas15" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:1.25" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  18:     <DoubleAnimation Storyboard.TargetName="Canvas16" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:1.33333" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  19:     <DoubleAnimation Storyboard.TargetName="Canvas17" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:1.41667" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  20:     <DoubleAnimation Storyboard.TargetName="Canvas18" Storyboard.TargetProperty="Opacity" From="1" To="1" BeginTime="0:0:1.5" Duration="0:0:0.0833333" FillBehavior="Stop"/>
  21: Storyboard>

I've got a lot of ideas now that Swift3D is in my Silverlight Dev toolkit. :)

 

Technorati Tags: ,,,

 

 

 

posted on Sunday, July 06, 2008 12:27 AM