Silverlight 2 3D - Part 6

1. mai 2008

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.

.Net, Silverlight

Silverlight 2 3D - Part 5

25. avril 2008

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.

.Net, Silverlight

Faire apparaître le curseur d'attente sur une application Windows Mobile

18. avril 2008

C'est le genre de truc idiot qu'on passe des heures à chercher. Et comme la documentation du Compact Framework est mixée avec la documentation du framework normal, il n'est pas facile de s"y retrouver.

Donc pour faire  apparaitre le curseur d'attente sur Windows Mobile, il suffit d'exécuter la ligne suivante:

Cursor.Current = Cursors.WaitCursor;

 

Hope this help....

.Net, Windows Mobile

Back From the BDC 2008

18. avril 2008

SlimDX Mars 2008

5. avril 2008

Grande nouvelle!!! Le superbe SlimDX vient de sortir estampillé "Mars 2008". Et autant vous le dire tout de suite, ça déchire. Nous avons enfin un wrapper managed pour DirectX 9 ET 10.

Excité comme une puce je me suis levé à 6h ce matin (impossible de dormir avec ça en tête) et j'ai commencé le portage du provider DirectX 9 de Nova depuis Managed DirectX (celui de Microsoft en 1.1) vers SlimDX.

Résultat des courses : génial. SlimDX tire parti des generics ce qui donne un code bien plus concis. De plus, l'API parfois un peu lourde de Managed DirectX est maintenant plus logique (adieu les classes statiques utilitaires du style TextureLoader, tout est sur Texture).

DirectX 9 est quasi parfaitement couvert (j'ai juste noté l'absence d'un enum : FogMode).

Je ne me suis pas encore penché sur DirectX 10 mais ca sent très très bon:)

Pour découvrir tout ça en live : SlimDX.

.Net, DirectX

Webcasts TechDays 2008

2. avril 2008

Si vous n'avez pu assister à mes sublimes sessions aux TechDays 2008, vous pouvez désormais les consulter en Webcasts aux adresses suivantes:

 

Have fun.

.Net, DirectX, WPF

Craquer ou ne pas craquer...

31. mars 2008

Bon je dois bien le dire j'ai envie de rejouer à Wow. Ca me titille même gravement. Alors pesons ensemble les pours et les contres:

  • Pour:
    • Mimetis arrêtera de me casser les rouleaux
    • Je retrouverai mes amis dans le jeu (oh mon dieu, des amis virtuels!! Comme c'est sale!!!)
    • Je retrouverai mon petit mage (oh mon dieu, un jouet virtuel!!! Espèce de dégénéré du bulbe mou!)
    • J'arrêterai de penser à mon éventuelle reprise
    • Retrouver les plaisirs de la progression en équipe, de l'organisation de beaux combats, de la stratégie à plusieurs
  • Contre:
    • Adieu ma super productivité du fait de mes soirées laissées libres
    • Fini les soirées DVD/câlins/dodo tôt
    • Obligé de rentrer tôt pour ne pas râter le début des raids
    • Obligé de me coucher à pas d'heure
    • Obligé de gueuler comme un con devant mon PC parce que je n'arrive pas à avoir les objets "de la mort qui déchire tout version 8" que je veux
    • Obligé de me taper Kévin et sa famille qui n'ont pas toutes les touches sur leur clavier, les obligeant par la même à n'utiliser que des mots sans voyelle

 

Bon au final, ca ne m'aide pas...je vais installer le jeu déjà, on verra bien.

WoW

Rendre une application C# compatible avec l'UAC de Vista

28. mars 2008

Malgré ce que peuvent en dire certains, je continue de penser que l'UAC est une bonne chose. Le fait de ne pas être tout puissant lorsque l'on est administrateur ou même le fait de pouvoir localement acquérir des droits plus élévés est à mon sens une excellente chose.

Il faut cependant penser ses applications dans ce sens lorsqu'elles doivent toucher à des fonctions gardées par l'UAC (comme le répertoire de Windows, Program Files ou bien encore la base de registre).

Pour ce faire il faut, au sein de son projet Visual Studio 2008, rajouter le fichier suivant (que l'on appelera xxxx.manifest):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>

Ce qui est important dans ce fichier, c'est la notion de requestedExecutionLevel. Elle peut valoir trois valeurs:

  • asInvoker
  • requireAdministrator
  • highestPossible

Dans notre cas, nous voulons que Vista propose à l'utilisateur une confirmation de l'élévation de droits pour notre application (si nous sommes administrateur) ou une fenêtre de demande de droits (si nous sommes simple utilisateur).

Pour lier le manifest à notre application, cela se passe dans les propriétés de l'application sous Visual Studio 2008 dans l'onglet Application. On y trouve une liste qui nous permet de lier un fichier .manifest du projet à l'application générée.

image

Et le tour est joué :).

.Net, Windows

Partage de storyboards en Silverlight

26. mars 2008

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é!

.Net, Silverlight

Nova : Personal Learning Edition

20. mars 2008

Si vous souhaitez vous lancer dans le monde merveilleux de la 3D et que vous êtes fans de .Net, une seule adresse:

http://www.vertice.fr/Public/PLE.aspx

Vous pourrez y télécharger Nova 2008 en version illimitée.

New_Arch1[1]

Sachez également que vous pouvez télécharger le SDK de Nova pour faire de la jolie 3D (avec des ombres, de la physique, des effets spéciaux) dans vos applications .Net:

http://www.vertice.fr/filesNova 2008 SDK.msi

Le SDK est également illimité. Par contre il cessera de fonctionner après 5 minutes d'exécution.

Nova