Graphisme 3D et animations
Graphisme en trois dimensions
1. Introduction
WPF offre un support d’imagerie 3D qui s’intègre aisément dans n’importe quelle fenêtre WPF. Avant de commencer à détailler les possibilités de cet aspect, il nous faut préciser un certain nombre de notions, à commencer par les questions de repère, de point de vue et de luminosité.
En WPF, la notion de point de vue est associée à un objet de type Camera qui considère la projection planaire d’un objet 3D. Cette projection est finalement une image bitmap générée en temps réel par ce que l’on appelle le moteur de rendu. Pour donner l’impression de perspective, le moteur de rendu calcule pour chaque point la quantité de lumière absorbée, ceci pour une source de lumière donnée.
Donc pour résumer, pour générer une image 3D, nous devrons être capables de :
-
Fournir un modèle 3D défini dans un repère 3D.
-
Fournir une Camera qui définit le point depuis lequel on observe la scène.
-
Fournir une source de lumière (Light).
2. Repère 3D
Un repère orthogonal 3D est utilisé par WPF. Quand il s’agit de définir quels sont les axes X, Y, et Z de ce repère, on utilise classiquement un repère « orienté sur la main droite » : typiquement l’index de la main droite représente l’axe X, le majeur l’axe Y et le pouce l’axe Z.
L’origine du repère est évidemment le triplet (0, 0, 0) ; sa norme (son unité) lui est propre et n’est plus le DIP comme en 2D : en effet, l’unité dépendra de la projection courante.
Enfin, une classe de point permet de définir un point de coordonnées 3D. Il s’agit d’un Point3D qui est défini dans l’espace de noms suivant :
using System.Windows.Media.Media3D;
Sa définition est la suivante :
[TypeConverter(typeof(Point3DConverter))]
[ValueSerializer(typeof(Point3DValueSerializer))]
public struct Point3D : IFormattable
{
public Point3D(double x, double y, double z);
public double X {...
Animations
1. Introduction
WPF permet d’animer des structures 2D ou 3D. Pour ce faire, WPF offre différentes stratégies d’animation, parmi lesquelles le déplacement linéaire entre un point A et un point B, le déplacement par algorithme d’interpolation (EasingFunction) ou encore le déplacement imposé au sein d’une collection de positions intermédiaires.
De manière générale, une animation s’applique aux propriétés de dépendance des objets animés, c’est-à-dire des objets implémentant l’interface IAnimatable. Précisons que la quasi-totalité des objets graphiques WPF, contrôles compris, implémentent cette interface.
public interface IAnimatable
{
bool HasAnimatedProperties { get; }
void ApplyAnimationClock(DependencyProperty dp,
AnimationClock clock);
void ApplyAnimationClock(DependencyProperty dp,
AnimationClock clock, HandoffBehavior handoffBehavior);
void BeginAnimation(DependencyProperty dp,
AnimationTimeline animation);
void BeginAnimation(DependencyProperty dp,
AnimationTimeline animation, HandoffBehavior handoffBehavior);
object GetAnimationBaseValue(DependencyProperty dp);
}
Chaque type susceptible d’être animé se voit associé à une classe implémentant l’interface IAnimatable. Ainsi, PointAnimation se voit en charge de l’animation d’une instance de Point ou encore ColorAnimation quand il s’agit d’une instance de Color. Par ailleurs, une première catégorie d’animation WPF s’envisage comme le mouvement d’un objet pendant une durée donnée (propriété Duration). La donnée temporelle peut être apportée par la valorisation des propriétés de début d’animation (From) et de fin d’animation (To) avec la précision d’un incrément (propriété By). C’est ce type d’animation que nous allons d’abord étudier.
2. Premières animations
Outre les propriétés...