Amis à l'esprit mathématique bonsoir ! (et bon courage...)
Je suis en train de réaliser un petit moteur 3D en VB (DirectX c'est hard, on verra plus tard). Le principe est simple. Des points sont définis dans l'espace 3D par x,y,z , des triangles sont définis par 3 de ces points, et des objets sont définis par N de ces triangles (un triangle ne doit jamais en couper un autre). En procédant ainsi, on détermine l'ordre d'affichage des triangles, et ensuite on peut ainsi afficher plusieurs centaines de triangles pour une animation 3D à peu près fluide et sans bug d'affichage de recouvrement entre polygnes. Avant de dessiner tout ça, je fais une transformation pour donner l'effet de perspective (effet de point de fuite).
Solution pour la priorité d'affichage des triangles : soient 2 triangles projetés à l'écran (en 2D, perspective), je détermine la surface commune de ces triangles par N points en 2D formant le contour, je determine leur barycentre. Ensuite -> je dois déterminer à partir de l'équation de plan du triangle 3D original (ax+by+cz+d=0) et des coordonnées 2D du barycentre, les coordonnées originales 3D du point du plan du triangle 3D ayant donné ce point 2D en perspective. Euh, suivez ? Ainsi, je pourrais déterminer l'équation d'une droite 3D passant par ces deux triangles et le point de vision, et grace à une formule donnant le point d'intersection d'une droite et d'un plan dans l'espace, je pourrais determiner quel triangle est devant l'autre.
Donc en résumé : comment trouver les coordonnées (Xreel,Yreel,Zreel) d'un point du triangle 3D (a*x+b*y+c*z+d=0), qui ont donné un point 2D (Xvu, Yvu) à l'écran ?
PS : pour la perspective j'utilise ce calcul :
Merci d'avence de votre courage, A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Proximum = 1000 'Constante Xvu = Xreel * Proximum / Zreel Yvu = Yreel * Proximum / Zreel
Partager