-
affichage de font en 3D
bonjour à tous
Novice, je suis en train de développer une interface graphique sommaire en VB.net + directX.
Le 1er objectif est de positionner un certain nombre de points dans l'espace, avec une "étiquette" à proximité (simplement le numéro de point).
Pour l'affichage du numéro, j'utilise la commande drawtext de Direct3D.font.
Le probleme est que cette commande positionne l'étiquette dans le repere 2D de la fenetre.
Comment faire pour que l'étiquette coincide avec la position du point ? (point décrit par ses coordonnées spatiales X,Y,Z)
merci
-
donc pour ton problème, ton point P dans l'espace 3D a des coordonnées (X, Y, Z), et toi tu cherche ou placer ton étiquettes dans l'espace de l'écran, on note P' (X', Y') la position de ton point dans l'espace 2D (espace de l'écran).
tu as ensuite matWorld, matView et matProj les matrices respectivement de transformation dans le monde, dans le repère caméra et de projection.
hors pour afficher ton point P sur l'écran, il faut transformer ton point avec toutes ces matrices : P' = P * matWorld * matView * matProj.
ensuite tu utilise les coordonnées de P' pour en déduire la position de ton étiquette sur l'écran.
bémol à cette explication : si je me rappelle bien la position de P' sera dans comprise dans l'intervalle [-1, 1]*[-1, 1] hors il me semble quand tu affiche du texte, tu utilise directement les coordonnées écran (1024*768 par exemple) donc tu auras un calcul supplémentaire à faire.
-
Bonjour
merci pour ta réponse.
A priori, il faut donc bien utiliser la commande Project associée à un objet de type vector3.
L'aide indique "project a vector from object space into screen space".
Elle nécessite comme arguments, dans l'ordre : le vecteur à projeter, viewport, matrice_projection, matrice_view, matrice_world (les 3 matrices comme indiqué dans ta réponse).
Qu'est ce que ce 2ème argument viewport ? (type Object)
2ème chose : la commande Project renvoie un objet de type vector3 également. Comment ensuite récupérer les coordonnées de l'écran 2 D ?
Merci
-
le viewport c'est vulgairement l'endroit où tu fais l'affichage, la plupart du temps la fenêtre de ton application.
après vérification, ici le viewport c'est les caractéristiques de ton affichage : coordonnées du point supérieur gauche, les dimensions en pixels, etc ...
pour les coordonnées dans de l'écran 2D, il suffit de lire dans ton vecteur résultant les coordonnées x et y.
-
merci pour ta réponse !
la commande project marche pas mal
(j'ai mis simplement device.Viewport en 2eme argument)
bonne journée