A la demande générale, la Bewise Day Conference est de retour pour une 4ème édition ! Encore une fois, venez découvrir ce qui se fait de mieux dans les technologies Microsoft.

Cette année, beaucoup de nouveautés, puisque Microsoft lance la gamme 2010 de ses produits, notamment Visual Studio, Sharepoint, mais aussi la version 4.0 de son framework .Net, MVC 2, Azure, Silverlight 4 et bien d’autres choses bien croustillantes.

J’animerai les plénières cette année et je vous conseille d’y participer car vous y découvrirez le grand secret de Bewise :).

Pour les inscriptions, rendez-vous sur le site officiel de la BDC 2010.

kosh 14. janvier 2009, 15:43

Pour le plaisir des yeux, je viens d’ouvrir une nouvelle section sur mon blog. Cette section nommée “Previews Nova” permettra d’avoir des previews de réalisations autour de Nova.

Cela se passe par ici.

Vous y trouverez une petite application silverlight (utilisant Deep Zoom) pour bien visualiser les images de previews (amusez vous à zoomer avec la molette de la souris).

On commence la série par une image issue d’une démo réalisée par mon ami mais néanmoins artiste Mitch. La démo en question utilise notre shader de métal et une nouvelle technique de représentation du verre (notamment sur les phares).

kosh 29. octobre 2008, 22:05

Juste une petite news pour indiquer que j'ai recompilé NovaLight avec la version définitive de Silverlight 2.

Au final, l'update du projet n'ayant pas marché j'ai du reconstruire un nouveau projet et basculer vers le VisualStateManager. Rien de bien méchant donc.

La suite par ici.

Kosh 11. juin 2008, 13:17

Comme vous devez déjà le savoir, la béta 2 de Silverlight 2.0 est sortie la semaine dernière.

J'en ai donc profité pour recompiler NovaLight et le Philosophe du Chaos.

Excellente nouvelle : le portage s'est fait en a peu près 20 secondes. L'installation se fait très facilement avec un plugin qui s'installe sous Visual Studio 2008.

 

En ce qui concerne mon besoin de génération d'images dynamiques je n'ai encore rien vu de nouveau mais l'espoir fait vivre...

Au programme aujourd'hui : lissage de Gouraud. Les faces des objets ne sont désormais plus uniformément colorées mais subissent correctement l'éclairage (calculé au niveau des vertices).

Il reste un soucis sur le depth buffer qui me fait passer parfois certains pixels par-dessus d'autres. Je travaille à augmenter la précision de tout ça.

Prochaine étape : les textures.

Pour jeter un coup d'oeil, c'est ici.

Kosh 25. avril 2008, 20:56

CA Y EST!!!! J'ai enfin pu faire un simili pixel shader. En gros grâce à un encoder PNG, je peux générer une image en mémoire, la compresser en PNG et la donner à un contrôle image via un BitmapImage:

scene.Render();
BitmapImage image = new BitmapImage();

image.SetSource(scene.BackBuffer.GetStream());
renderImage.Source = image;

A partir de ça, j'ai pu simuler un Depth Buffer. Résultat : les objets s'affichent bien, les faces ne se passent plus les unes sur les autres.

De plus j'ai mis en place un interpolateur qui va me permettre de gérer des textures.

Finalement, je vais rajouter une gestion multi-threads pour supporter les multi-cores.

Pour la petite histoire, sans la génération PNG (qui n'est utile que parce que le contrôle Image ne sait pas manger du bmp), le moteur irai deux fois plus vite.

Par contre, grâce à tout ça, les objets complexes sont carrément plus rapide. J'en veux pour preuve le nain qui tourne à 20fps chez moi là ou il tournait à 9fps précédemment.

Tout ce passe ici.

Kosh 18. avril 2008, 13:32

La BDC 2008 est terminée et fût un grand succès. Vous pouvez retrouver sur ces adresses les sessions que j'ai animé:

http://silverlight.services.live.com/invoke/58450/BDC%202008%20Session%20Pl%c3%a9ni%c3%a8re%201/iframe.html

http://silverlight.services.live.com/invoke/58450/BDC%202008%20Session%20Pl%c3%a9ni%c3%a8re%202/iframe.html

http://silverlight.services.live.com/invoke/58450/BDC%202008%20Session%20Pl%c3%a9ni%c3%a8re%203/iframe.html

http://silverlight.services.live.com/invoke/58450/BDC%202008%20Session%20Pl%c3%a9ni%c3%a8re%204/iframe.html

http://silverlight.services.live.com/invoke/58450/BDC%202008%20Session%20NIU1/iframe.html

http://silverlight.services.live.com/invoke/58450/BDC%202008%20Session%20NIU2/iframe.html

Ne vous inquiétez pas si la page reste blanche un moment, c'est lié au chargement du contrôle Silverligth 1.0.

Et hop la:)

Plusieurs personnes m'ont demandé le code des barres qui apparaissent sur mouse over dans Nova Light.

Je m'exécute donc avec plaisir :). Cela va me permettre de parler un peu du partage d'animations via les storyboards.

Pour la partie contrôle j'ai défini une grille toute simple:

<Grid HorizontalAlignment="Left" Margin="-134,0,0,0" Width="210" VerticalAlignment="Stretch" RenderTransformOrigin="0.5,0.5" x:Name="grid" MouseEnter="grid_MouseEnter" MouseLeave="grid_MouseLeave">
    <Grid.RenderTransform>
        <TransformGroup>
            <ScaleTransform/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>
    </Grid.RenderTransform>
    <Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" Width="Auto" Stroke="#C1C1C1" VerticalAlignment="Stretch" RadiusX="10" RadiusY="10">
        <Rectangle.Fill>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Offset="0" Color="#FBFBFB"></GradientStop>
                <GradientStop Offset="0.5" Color="#F3F3F3"></GradientStop>
                <GradientStop Offset="0.5" Color="#E8EAEA"></GradientStop>
                <GradientStop Offset="1.0" Color="#ECECEC"></GradientStop>
            </LinearGradientBrush>
        </Rectangle.Fill>
    </Rectangle>
    <CheckBox x:Name="ckFPS" HorizontalAlignment="Left" Foreground="#888888" Content="FPS" Checked="ckFPS_Checked" Unchecked="ckFPS_Unchecked" Margin="14,0,0,0"/>
    <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" Text="Options" TextWrapping="Wrap" d:LayoutOverrides="Width, Height" Margin="0,0,15,0" Foreground="#888888"/>
    <Image Source="Grip.png" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0, 15, 4, 15"/>
</Grid>

J'ai également déclaré dans les resources du contrôle les storyboards suivants:

<Storyboard x:Name="ShowScenes">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="gridScene" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" BeginTime="00:00:00">
        <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="322"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Name="HideScenes">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="gridScene" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" BeginTime="00:00:00">
        <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

On pourra noter que les storyboards ciblent une autre grille que la mienne. En effet, je me sers de ces storyboards de manière générique pour toutes les barres du contrôle.

Toute la magie se fait donc au niveau des événements "grid_MouseEnter" et "grid_MouseLeave":

private void grid_MouseEnter(object sender, MouseEventArgs e)
{
    Storyboard.SetTarget(ShowScenes, grid);
    ShowScenes.Begin();
}

private void grid_MouseLeave(object sender, MouseEventArgs e)
{
    Storyboard.SetTarget(HideScenes, grid);
    HideScenes.Begin();
}

On en revient donc toujours à ces propriétés attachées :). En effet, il me suffit ici de venir changer la cible de mon storyboard via la méthode statique Storyboard.SetTarget.

Et le tour est joué!

Kosh 19. mars 2008, 22:29

Afin de mettre en image ma théorie du nombre limité de possibilités ("Des chiffres et des lettres"), j'ai écris un petit programme en Silverlight accessible ici.

Ce petit plugin génére 5 mots de manière totalement aléatoire. Chaque mot peut compter entre 0 et 9 signes alphabétiques.

Pour reprendre mon idée, il est tout à fait possible que le philosophe du chaos vous sorte une phrase tout à fait correcte et même une pensée fine du style "je pense donc je suis".

Si cela vous arrive, surtout envoyez moi un mail.

Je vais faire une évolution qui va faire en sorte que les mots générés soient vérifiés dans un dictionnaire pour une future version ce qui augmentera énormément les chances de phrases correctes.

Tip : Il est possible de refaire générer une nouvelle phrase en cliquant sur la phrase actuelle.

Un peu de design et ça se la raconte tout de suite plus :)

Grâce à mon ami Cyril Sansus, mon petit moteur 3D a un peu plus de gueule.

J'ai mis en place des controls templates pour les boutons et les menus ont été redessinés.

D'ailleurs au passage, si l'on souhaite gérer simplement des animations sur un bouton (par exemple), il suffit de créer un storyboard dans le template d'un bouton avec un nom spécifique:

  • MouseOver State : Pour le mouse Over
  • Pressed State : Pour le mode appuyé

C'est assez différent de WPF qui nous fournit pour cela un mécanisme plus riche avec les triggers.

Un lien sur le MSDN résume tout cela par contrôle : http://msdn2.microsoft.com/en-us/library/cc189093(VS.95).aspx

Exemple pour Nova Light:

<Grid Width="50" Margin="1,2,1,2" x:Name="RootElement" 
RenderTransformOrigin="0.5, 0.5" Opacity="0.8">
    <Grid.Resources>
        <Storyboard x:Key="Normal State" />
        <Storyboard x:Key="MouseOver State">
            <ColorAnimation Duration="0:0:0.2" 
                            Storyboard.TargetName="finalColor" 
                            Storyboard.TargetProperty="Color" 
                            To="#AAAAAA" />
            <DoubleAnimation Duration="0:0:0.1" 
                             Storyboard.TargetName="RootElement" 
                             Storyboard.TargetProperty="Opacity" 
                             To="1" />
        </Storyboard>
...
    </Grid.Resources> 
</Grid>