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

OpenGL Discussion :

Convex triangle 3D


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut Convex triangle 3D
    Bonjour,

    Suite à la construction d'un tétraèdre , j'aimerais que les surfaces de celui-ci deviennent bombée. Ce tétraèdre est crée avec des triangles quelconques.
    Il me semble qu'il faut calculer le point aux intersections des médianes du triangles puis calculer le vecteur perpendiculaires à ce plan. Par contre suite à cela , je ne vois pas trop la méthode à utiliser pour réaliser cette opération.

    Si vous pouviez me donner quelques pistes pour commencer .

    Merci .

  2. #2
    Membre éprouvé Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Par défaut
    Yep,

    Je pense que tu as déjà tout ce qu'il te faut, reste plus qu'à te lancer.

    En pseudo code, je vois un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
     
    void bombage(list triangles)
    {
           for (i = 0; i < nb_triangle; i++) //(4 au départ)
           {
                    centre = calcule_centre_triangle(triangles[i]); 
                    normal = calcule_normal(triangles[i]);
     
                    D= centre+normal*offset;
     
                    //calcul des 3 nouveaux triangles à partir de D et triangle i
                    triangle1(triangles[i].A,triangles[i].B, D);
                    triangle2(triangles[i].A,triangles[i].C, D);
                    triangle2(triangles[i].B,triangles[i].C, D);
     
                    //rajoute les 3 nouveaux triangles à la liste des triangles
                    triangles.push_back(triangle1);
                    triangles.push_back(triangle2);
                    triangles.push_back(triangle3);
     
                     //suppression du triangles i de la liste
                     triangles.clear(i);
           }
    }
    En première approche, avec :

    triangles : liste des triangles formant ton mesh. Triangles de sommet A,B,C
    calcule_centre_triangle : fonction qui calcule le centre de ton triangle (par médiane, barycentre, ce que tu veux)
    calcul_normal : calcul la normale (normalisée) de la face orientée vers l'extérieur du tétraèdre.
    D : nouveaux point décaler selon la normal et par rapport au centre du triangle.

    Après c'est pas bien compliqué reste juste à l'implémenter dans le langage dans lequel tu codes, notamment avec la manipulation des listes, tableaux, et autre structure de stockage de tes triangles. Dans le pseudo code que je t'ai posté je rajoute et supprimer les triangles de ma liste un peu n'importe où.

    Mais comme le pseudo code est sans faille, et ma list triangle c'est du génie d'implémentation.

    Idem pour le calcul du barycentre et normale orientée vers l'extérieur. Imposes toi des contraires sur le sens des sommets de tes triangles (horaires ou antihoraires) pour obtenir directement le sens de ta normales vers l'extérieur.

    Pour calculer le barycentre de ton triangle s'il est isocèle c'est pas trop dure : la somme des vertex divisé par 3, (mais après faut jouer sur l'offset pour que tes nouveaux triangles soient aussi isocèles). Si non sur wikipedia tu dois trouver la formule pour calculer le barycentre de ton triangle.

  3. #3
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Merci . J'ai réussi a intégrer l'algorithme détaillé dans mon logiciel.

    Par contre le rendu est pas terrible . Le fait de créer un nouveau tétraèdre sur une des faces du premier me donnent une forme de montagne russe.

    J'aimerais pouvoir lissé le tétraèdre crée pour obtenir une surface lisse.
    Pour illustrer mes propos :



    Par contre je ne vois pas trop comment habiller mon tétraèdre pour pouvoir le lisser . Existe -il sous Opengl une fonction permettant de lisser une surface ?

Discussions similaires

  1. Point à l'intérieur d'un triangle ?
    Par remi77 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 15/05/2017, 14h49
  2. [ALGO] dessiner un triangle dans le bon sens
    Par lefait dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 05/02/2005, 14h38
  3. [Algo] Point appartenant au triangle
    Par alexthomas dans le forum OpenGL
    Réponses: 12
    Dernier message: 05/03/2004, 16h31
  4. une ligne et un polygone convexe
    Par rekam dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 20/12/2002, 10h39
  5. [3D] Triangles
    Par Frederic dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 08/11/2002, 23h01

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