Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Silverlight Underground

Retrogaming, Casual Games, Emulation with Silverlight
Démo en Silverlight 3 : Affichage d'un cube 3D en HD

Pour voir d'un peu plus près ce que Silverlight 3 a dans le ventre, j'ai fait une petite démo assez sympathique.

Cube 3D HD en Silverlight 3
Cliquez ici pour voir la démo.

Cette démo met en scène les fonctionnalités suivantes :

- Affichage d'une vidéo HD en 852x480 au format H.264 et AAC. La source utilisée est carrément un trailer disponible dans la gallerie HD de QuickTime 7 (.mov) qui est lu en streaming directement. Si si, c'est possible !

- Utilisation de l'accélération matérielle et du nouveau compteur de FPS pour voir les performances obtenues.

- Utilisation des effets de perspective 3D de Silverlight. C'est pas encore de la vraie 3D mais on s'en rapproche. Ici j'ai simulé l'affichage d'un cube (enfin un cube 16:9ème).

Voici un extrait du code source XAML :

<Canvas x:Name="Face1" Width="0" Height="0" Background="Black">
   <MediaElement x:Name="Video" Width="0" Height="0" Source="http://images.apple.com/movies/us/hd_gallery/gl1800/480p/batman_begins_m480p.mov" />
   <Canvas.Projection>
      <PlaneProjection RotationY="0" />
   </Canvas.Projection>
</Canvas>
<Canvas x:Name="Face2" Width="0" Height="0" Background="Black">
   <Image x:Name="Silverlight" Width="0" Height="0" Source="http://www.innoveware.com/ql3/silverlight.png" />
   <Canvas.Projection>
      <PlaneProjection RotationY="0" />
   </Canvas.Projection>
</Canvas>

J'utilise ici deux objets Canvas sur fond noir, l'un avec la vidéo H.264, l'autre avec une image de logo Silverlight. Il s'agit des deux faces principales du cube. Deux faces suffisent pour afficher le cube, inutile de s'encombrer de quatre faces (d'autant plus que la vidéo consomme beaucoup de ressources).

Voici maintenant un extrait du code source C# :

// Simulate cube faces with only two faces.
double rangle1 = (angle < 90 || angle > 270) ? 90 + angle : 270 + angle;
double rangle2 = (angle < 180) ? 360 + angle : 180 + angle;

// Compute first face position.
double x = distance * Math.Cos(DegreeToRadian(rangle1));
double z = distance * Math.Sin(DegreeToRadian(rangle1));

// Project face.
Face1.Projection.SetValue(PlaneProjection.RotationYProperty, rangle1 - 90);
Face1.Projection.SetValue(PlaneProjection.GlobalOffsetXProperty, x);
Face1.Projection.SetValue(PlaneProjection.GlobalOffsetZProperty, z - distance);

// Compute second face position.
x = distance * Math.Cos(DegreeToRadian(rangle2));
z = distance * Math.Sin(DegreeToRadian(rangle2));

// Project face.
Face2.Projection.SetValue(PlaneProjection.RotationYProperty, rangle2 - 90);
Face2.Projection.SetValue(PlaneProjection.GlobalOffsetXProperty, x);
Face2.Projection.SetValue(PlaneProjection.GlobalOffsetZProperty, z - distance);

Il s'agit de la boucle d'affichage principale. On va incrémenter l'angle de rotation Y du cube d'un degré en un degré. On détermine tout d'abord quelles sont les angles de projection des faces à afficher en alternance (je rappelle qu'on n'utilise que deux faces et non quatre).

Ensuite on utilise les propriétés GlobalOffsetX et GlobalOffsetZ de la projection perspective de Silverlight 3. C'est ce qui va nous permettre de déplacer le cube autour de son centre. Par défaut les objets 3D en Silverlight tournent sur eux-mêmes.

Cela correspond en fait à faire tourner nos coordonnées X et Z sur un cercle de rayon égal à la moitié de notre image. On positionne aussi le centre du cube sur l'axe des Z en arrière avec ce même rayon.

N.B: Pour l'instant, je n'ai pas réussi à faire mieux qu'un cube qui tourne sur un seul axe comme ici. Une double rotation impliquerait ici des calculs encore plus complexes. Mon prochain défi : une boule en 3D :)

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mardi 24 mars 2009 17:03 par InnoveWare

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [Divers] Suivre vos séries préférés sur la toile par Open Blog le il y a 1 heure et 10 minutes

- TechDays Paris 2010 : La BI dans SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 5 heures et 18 minutes

- TechDays Paris 2010 : Déploiement de nouvelles technologies – Retour d’expérience par l’informatique de Microsoft par Blog Technique de Romelard Fabrice le il y a 6 heures et 45 minutes

- TechDays Paris 2010 : Plan de migration vers SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 10 heures et 27 minutes

- TechDays Paris 2010 : La pleinière du second jour par Blog Technique de Romelard Fabrice le il y a 11 heures et 32 minutes

- Visual Studio 2010 and .NET Framework 4 Release Candidate now available par Matthieu MEZIL le il y a 14 heures et 38 minutes

- Création d’une base de donnée sous SQL Azure par Le Blog (Vert) d'Arnaud JUND le il y a 15 heures et 35 minutes

- TechDays Paris 2010 : Les Services d’applications dans SharePoint 2010 par Blog Technique de Romelard Fabrice le 02-08-2010, 20:52

- TechDays Paris 2010 : La GED et SharePoint 2010 par Blog Technique de Romelard Fabrice le 02-08-2010, 16:54

- TechDays Paris 2010 : SharePoint 2010 et Les réseaux sociaux par Blog Technique de Romelard Fabrice le 02-08-2010, 15:40