Avec WPF, il n'a jamais été aussi facile d'incorporer de la 3D dans une interface utilisateur. Il s'agit là d'un réel rendu 3D géré en DirectX, et très bien intégré aux composants d'interface utilisateur. Il est par exemple possible de rendre l'aspect d'un bouton en tant que cube 3D, le tout accéléré matériellement. L'intégration est même tellement simple en comparaison d'une utilisation traditionnelle en DirectX, que les novices seront tentés de se plonger rapidement dans la création de scènes 3D sans s'attarder sur les bases du rendu 3D. Pourtant, certains concepts ne devraient pas passer à la trappe. c'est notamment le cas des rotations de caméras.
En jouant avec la propriété LookDirection d'une caméra, il peut arriver que la scène disparaisse brusquement de l'écran. Généralement, ce phénomène se produit lorsque la LookDirection pointe sur un vecteur 100% vertical (0,1,0) ou (0,-1,0). Si l'on poursuit la rotation, la scène réapparaitra, mais inversée, comme au travers d'un miroir.
À première vue, ceci a tout l'air d'un bug.
Premier réflexe : Il y'a un bug dans WPF
Second Réflexe : Il y'a quelque chose dans WPF que je n'utilise pas correctement.
Il existe une seconde propriété qu'il est nécessaire de gérer lors d'une rotation d'une caméra.
LookDirection ne permet que d'indiquer quel est la direction dans laquelle la caméra pointe, mais rien n'indique où se trouve le haut et où se trouve le bas.
UpDirection permet de spécifier un vecteur qui indiquera le haut.
Explications :
Par défaut, le haut se trouve être un vecteur vertical. Pour comprendre ce compoertement, il va nous falloir faire appel à nos vagues souvenirs de mathématiques.
UpDirection et LookDirection n'ont pas nécessairement besoin d'être perpendiculaires. WPF va automatiquement calculer le produit cross entre le vecteur LookDirection et le vecteur UpDirection.
Si, par un jeu de rotations, le vecteur de la direction à regarder et le vecteur indiquant le haut sont confondus, le produit Cross sera nul et on ne pourra déterminer aucune composante perpendiculaire au vecteur LookDirection. Pour cette raison, le résultat du rendu est indéfini, et la scène n'est pas affichable. LookDirection passera de l'autre côté du vecteur, et le
En poursuivant la rotation, si le vecteur UpDirection n'est pas mis à jour, il aura pour effet d'indiquer la direction précédemment considérée comme le bas en tant que nouvelle direction du haut.
Il n'y a donc pas de bug à ce niveau là dans WPF, juste un manque de connaissance en ce qui concerne le positionnement des caméras.
Source : WPF Unleashed,Nathan Adler, p.427
70967da5-2082-4644-9c4a-c50603143cc2|0|.0