2009-11-08 6 views
2

Dans une scène 3D, nous avons souvent besoin d'appliquer des étiquettes (petits éléments de texte ou icônes) à côté de l'objet 3D qui se déplace (rotation, translation) dans la scène. Ces étiquettes doivent toujours faire face à l'appareil photo, mais toujours bouger avec l'objet. Cette technique, je crois, est appelée panneau d'affichage.WPF 3D Billboards

Une fonctionnalité intéressante supplémentaire serait que l'étiquette reste toujours à la même taille, quelle que soit la distance de l'objet associé. Ainsi, l'étiquette semble vivre dans un espace d'écran 2D et non dans le graphe de scène 3D.

Est-ce que quelqu'un trouve un moyen astucieux de faire cela dans WPF?

Répondre

1

Pour l'affichage, vous devez vous assurer que le visage normal pointe vers la caméra. L'algorithme est que le produit scalaire entre la normale de la face et la direction de la vue doit être -1 (moins un).

J'ai un vieux code C qui fait cela, mais ce n'est probablement pas particulièrement utile. Pour garder l'objet de la même taille, vous devez déterminer la taille de l'écran, puis appliquer une transformation pour conserver la taille constante désirée. Cependant, si vous voulez que l'objet apparaisse comme s'il était dans un espace 2D, pourquoi ne pas le dessiner dans un recouvrement 2D? Cela résoudra à la fois le problème d'affichage et de mise à l'échelle en même temps. Vous travaillez sur l'emplacement d'écran de votre étiquette, puis utilisez les fonctions de dessin 2D.

+0

Je peux dessiner en superposition 2D, mais comment déterminer la position de l'étiquette? Lorsque l'objet 3D associé se déplace, l'étiquette doit se déplacer avec. Je suppose que cela influe sur calculer la matrice de projection ou quelque chose. – bitbonk

+0

Je suis plus ou moins conscient des maths derrière tout cela et si j'essaie vraiment fort, je pourrais même être capable de calculer la matrice correcte dont j'aurais besoin pour la transformer en vue. Mais j'espérais vraiment que je n'aurais pas à le faire moi-même :) Aussi, je ne suis pas sûr de savoir comment intégrer tout cela dans une scène WPF Viewport3D. – bitbonk

+0

Oui, vous devez vous impliquer avec les matrices de projection. Je n'ai pas fait de 3D avec WPF, donc je ne voudrais pas dire quelles méthodes et/ou propriétés vous avez besoin. – ChrisF