Affichage objet 3D et arêtes cachées [Résolu]

Signaler
Messages postés
1011
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 avril 2021
-
Messages postés
15063
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
-
Bonjour,

J'ai développé un petit système de CAO qui peut afficher des solides en 3D et les faire
pivoter dans l'espace à l'aide de la souris

Mes objets sont définis par des lignes (les arêtes) reliant des points (les sommets), il n'y a pas de formes cylindriques

La gestion de l'élimination des arêtes cachées est assez simple: j'utilise l'algorithme du peintre
(on affiche les faces dans leur ordre d'éloignement par rapport à la "caméra")

Mais je voudrais aussi faire un rendu avec arêtes cachées en pointillés, et mes recherches sur Internet conduisent souvent à la 3D pour jeux vidéos et donc, évidemment, on ne veut que des objets en vues ombrées (shading) : couleurs, ombres, arêtes cachées invisibles, …
Donc pas évident de trouver ce que je cherche

Si vous avez des pistes ou des liens décrivant l'algorithme recherché ....

Merci par avance !

Configuration: Windows / Edge 89.0.774.54

9 réponses

Messages postés
15063
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
bonjour, ne suffit-il pas d'afficher les arêtes au lieu des faces, et, pour chaque face, déterminer les segments d'arêtes qui deviennent cachés?
Messages postés
1011
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 avril 2021
112
Bonjour yg_be,

Tout à fait

Pour la visu avec arêtes cachées invisibles, j'affiche les faces dans le bon ordre et je les "peint", et donc la vue est correcte

Par contre, maintenant, il faudrait afficher les arêtes, et déterminer les segments cachés, et c'est
bien pour cela que je cherche l'algorithme qui convient ...
Messages postés
15063
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
la seule partie qui me semble un peu compliquée est de déterminer si un point est à l'intérieur d'un polygone.
http://xymaths.free.fr/MathAppli/Algorithme-Interieur-Polygone/
Messages postés
1011
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 avril 2021
112
Oui, mais il y a d'autres critères à prendre en compte, regarde ce vé:


Le point 1 est à l'intérieur d'un polygone, l'arête A1 est en pointillés, l'arête A2 est en partie en pointillés,
Le point 2 de la face avant est à l'intérieur d'un polygone mais elle n'a pas de pointillés
et ca dépend de l'ordre d'affichage, si on commence par la face arrière, aucun point n'est dans un polygone

Il y a surement un algo plus global ...
Messages postés
15063
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
pour moi, l'algo est clair:
- tu as une liste des arêtes visibles et une liste des arêtes invisibles
(ces listes sont vides au départ)
- tu fais une boucle sur toutes les faces, en commençant par les faces du fond
- pour toutes les arêtes de la liste des arêtes visibles,
si l'arête visible a une intersection avec une des arêtes de la face,
tu découpes l'arête visible en deux arêtes
(qui remplacent l'arête originale dans la liste des arêtes visibles)
- pour toutes les arêtes de la liste des arêtes visibles,
si le point milieu de l'arête est à l'intérieur du polygone
(le polygone de la face),
l'arête devient invisible (elle change de liste)
- tu ajoutes les arêtes de la face dans la liste des aretes visibles
- tu affiches les arêtes des deux listes
Messages postés
15063
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827 >
Messages postés
15063
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021

si tu veux réassembler les arêtes invisibles avant de les afficher, je pense que le plus simple est de mémoriser, pour chaque arête découpée, son arête d'origine. cela aidera à déterminer quels sont les candidats à l'assemblage.
Messages postés
1011
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 avril 2021
112
Bonjour yg_be,

OK, j'essaie et je te tiens au courant ...
Messages postés
1011
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 avril 2021
112
Holà yg_be,

J'avoue - à ma courte honte - que je n'ai pas tout compris :-)

Prenons la face arrière de mon vé (donc la face en vé du fond) :
si l'arête visible a une intersection avec une des arêtes de la face : il y a une arête dans ce cas, mais
pourquoi la découper en 2 ?

si le point milieu de l'arête (visible) est à l'intérieur du polygone de la face
aucune arête visible dans ce cas ...
Messages postés
15063
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
quand tu commences avec la face arrière, la liste des arêtes visibles est vide.
ce n'est qu'en ligne 12 que tu ajouteras des arêtes dans la liste des arêtes visibles.

- tu as une liste des arêtes visibles et une liste des arêtes invisibles
      (ces listes sont vides au départ)
- tu fais une boucle sur toutes les faces, en commençant par les faces du fond
      - pour toutes les arêtes de la liste des arêtes visibles, 
          si l'arête visible a une intersection avec une des arêtes de la face, 
            tu découpes l'arête visible en deux arêtes 
                 (qui remplacent l'arête originale dans la liste des arêtes visibles)
      - pour toutes les arêtes de la liste des arêtes visibles, 
               si le point milieu de l'arête est à l'intérieur du polygone 
                         (le polygone de la face), 
                   l'arête devient invisible (elle change de liste)
      - tu ajoutes les arêtes de la face dans la liste des arêtes visibles
- tu affiches les arêtes des deux listes
Messages postés
1011
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 avril 2021
112
Bonjour yg_be,

Ca a l'air de fonctionner sur le papier.

En attendant d'intégrer ça dans mon code, je vais tester dans un petit programme test
en mode console avec un simple cube

J'ai codé en dur la liste des points et leur coordonnées, j'ai orienté le cube avec une matrice de rotation, et je suis en train de développer mes fonctions de calcul de point d'intersection
arête/polygone de face, de découpage d'arête, et de vérification si point milieu d'arête est à l'intérieur du polygone de face

Ensuite, j'afficherai simplement la liste des arêtes supposées être en pointillés
Messages postés
1011
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 avril 2021
112
Bonjour yg_be,

Je reviens enfin à mon post, je n'étais pas à plein temps dessus

Tout fonctionne, merci pour ton aide !
Ci-dessous 2 copies d'écran montrant mon vé sous 2 angles différents:

Messages postés
15063
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
pas mal!
pas trop compliqué pour déterminer si un point est à l'intérieur d'un polygone?
Messages postés
1011
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 avril 2021
112


Bizarre, on ne peut pas insérer 2 images de suite ...
Messages postés
1011
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 avril 2021
112
Bonjour yg_be,

Pas de problème, j'ai suivi le lien que tu m'avais donné

Tu l'as surement deviné en regardant mes images, j'ai fait tout ça en Python + Tkinter

Je sais, c'est fou de refaire complètement ce que les logiciels de CFAO existants font très bien, et même mieux depuis longtemps, mais ca fait travailler mes neurones :-)

Certains font bien des mots croisés ou des sudoku ...
Messages postés
15063
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
merci d'aussi faire travailler nos neurones en posant des questions ici!