IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Problème d'équations dans l'espace (perspective -> 3D)


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 87
    Points
    87
    Par défaut Problème d'équations dans l'espace (perspective -> 3D)
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Proximum = 1000 'Constante
    Xvu = Xreel * Proximum / Zreel
    Yvu = Yreel * Proximum / Zreel
    Merci d'avence de votre courage, A+
    Celui qui pose une question est bête 5 minutes, celui qui ne la pose pas est bête toute sa vie...

  2. #2
    doccpu
    Invité(e)
    Par défaut
    1er poin pourquoi un triangle ne peut pas en couper un autre ? En 3d il est fréquent que les triangles se coupent (ex pour les collisions d'objets).

    Dans (a*x+b*y+c*z+d=0) q'uapelle tu 'd' comment l'obtient tu a quoi sert il ?

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    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 ?
    En général on applique simplement l'inverse des transformations qui ont permis le passage 3D -> 2D. Comme ces transformations se trouvent typiquement sous forme de matrice, ce n'est pas très compliqué.

    Mais... puisque tu sembles faire un moteur 3D software, et que c'est tout de même très compliqué, est-ce que tu as lu quelques tutos sur le sujet ?

  4. #4
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 87
    Points
    87
    Par défaut
    Merci de votre interet

    DocCPU : pour l'impossibilité d'intersection des triangles, c'est moi qui l'impose, pour me simplifier la vie. Sinon le d, ben il intervient toujours dans une équation de plan, non ?

    Loulou24 : non, je n'ai pas lu de toto, car je trouve que les gas se compliquent souvent la vie, alors j'inove pour mes besoins personnels. Une fois que j'aurais résolu ce problème, je pense que cela ira tout seul. Sinon la transformation inverse est spéciale, car les points de projection 2D ont perdu leur composante Z, et il faut trouver leur origine 3D à partir de n'importe quelle équation de plan 3D.
    Celui qui pose une question est bête 5 minutes, celui qui ne la pose pas est bête toute sa vie...

  5. #5
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 87
    Points
    87
    Par défaut
    Bon, ben c'est vrai que j'aurais dû chercher un peu plus longtemps . Voici donc la réponse à ma question...

    Soit le triangle 3D d'équation ax+by+cz+d=0
    Soit un point 3D de ce triangle dont on cherche les coordonnées (Xr,Yr,Zr)
    Soit le point 2D de coordonnées (Xv, Yv), image de ce point 3D par la fonction de transformation en perspective
    Soit Prox une constante égale à 1000 (qui sert à regler l'effet de perspective).
    On a

    Zr = (-d * Prox) / (a * Xv + b * Yv + c * Prox)
    Xr = Xv * Zr / Prox
    Yr = Yv * Zr / Prox

    En ésperant ne pas m'être trompé, mais je pense pas. Si c'est le cas, je modifie mon message dès que je m'en rend compte. A+
    Celui qui pose une question est bête 5 minutes, celui qui ne la pose pas est bête toute sa vie...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déterminer l'équation d'un plan dans l'espace
    Par tunsty dans le forum Mathématiques
    Réponses: 10
    Dernier message: 04/05/2010, 10h06
  2. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 11h21
  3. problème de police dans un richedit
    Par chtiot dans le forum Composants VCL
    Réponses: 4
    Dernier message: 28/10/2003, 09h48
  4. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo