Affichage objet 3D et arêtes cachées

Résolu/Fermé
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 15 mars 2021 à 17:09
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 - 26 mars 2021 à 10:49
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
A voir également:

9 réponses

yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
16 mars 2021 à 13:11
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?
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
16 mars 2021 à 13:23
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 ...
0
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
16 mars 2021 à 15:57
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/
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 16 mars 2021 à 18:17
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 ...
0
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
16 mars 2021 à 18:40
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
0
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477 > yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024
16 mars 2021 à 18:45
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.
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
17 mars 2021 à 10:34
Bonjour yg_be,

OK, j'essaie et je te tiens au courant ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 17 mars 2021 à 17:47
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 ...
0
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
17 mars 2021 à 23:03
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
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
20 mars 2021 à 12:01
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
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 25 mars 2021 à 17:43
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:

0
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
25 mars 2021 à 19:23
pas mal!
pas trop compliqué pour déterminer si un point est à l'intérieur d'un polygone?
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 25 mars 2021 à 17:45


Bizarre, on ne peut pas insérer 2 images de suite ...
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
26 mars 2021 à 09:58
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 ...
0
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
26 mars 2021 à 10:49
merci d'aussi faire travailler nos neurones en posant des questions ici!
0