Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment calculer les normales d'un mesh?

    5 août 2018 à 18:56:00

    Bonjour,

    J'essaye de généré des mesh de façon procédurale en format objet le probleme c'est que je c'est pas comment on calcule les normales?

    https://fr.wikipedia.org/wiki/Objet_3D_(format_de_fichier)

    -
    Edité par GregoireDaelman 5 août 2018 à 18:56:57

    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2018 à 10:35:07

      Salut !

      Si je ne me trompe pas, la méthode mathématique pour déterminer de quel côté d'une face se trouve la normale est la suivante :

      Pour chaque face, tu "lances" une normale, et tu comptes le nombre de faces que tu croise. Si le nombre est pair, c'est que la normale est du bon côté. Si le nombre est impair, c'est que la normale est à l'envers.

      Attention, cette méthode ne marche pas sur les mesh non manifold.

      • Partager sur Facebook
      • Partager sur Twitter
        20 août 2018 à 13:52:30

        Salut

        Si j'ai bien compris, tu génères toi même les vertices et les triangles de ton mesh, puis tu écris le résultat au format .obj?

        Au niveau des indices de tes triangles, tu as normalement associé chaque sommet avec l'index d'un vertex, en respectant soit le sens horaire, soit le sens anti-horaire, ce qui t'indiquera la face avant.

        Pour calculer la normale de chaque vertex, tu as plusieurs solutions :

        - flat: pour chaque triangle, calcule le produit vectoriel de deux côtés du triangle, normalise le résultat, puis affecte le à chaque sommet de ton triangle.

        - smooth: Initialise une liste de normales de la même taille que le nombre de points de ton mesh (avec chaque normale initialisée au vecteur nul). Boucle sur chaque face, calcule le produit vectoriel de deux côtés, et pour chaque vertex du triangle additionne le résultat avec la valeur précédente dans la liste des normales. A la fin de la boucle, normalise chaque normale. La normale de chaque vertex devrait donc être la moyenne des normales des triangles adjacents pondérés par leur surface.

        Dans le fichier obj, déclarer des normales, et les associer est très basique. Voici un exemple de base en exportant le cube d'une scène par défaut de blender, avec chaque face triangularisée, et bien évidemment pour un cube du flat shading :

        v 1.000000 1.000000 -1.000000
        v 1.000000 -1.000000 -1.000000
        v -1.000000 -1.000000 -1.000000
        v -1.000000 1.000000 -1.000000
        v 1.000000 0.999999 1.000000
        v 0.999999 -1.000001 1.000000
        v -1.000000 -1.000000 1.000000
        v -1.000000 1.000000 1.000000
        vn 0.000000 0.000000 -1.000000
        vn 0.000000 0.000000 1.000000
        vn 1.000000 -0.000000 0.000000
        vn -0.000000 -1.000000 0.000000
        vn -1.000000 0.000000 -0.000000
        vn 0.000000 1.000000 0.000000
        f 2//1 3//1 4//1
        f 8//2 7//2 6//2
        f 5//3 6//3 2//3
        f 6//4 7//4 3//4
        f 3//5 7//5 8//5
        f 1//6 4//6 8//6
        f 1//1 2//1 4//1
        f 5//2 8//2 6//2
        f 1//3 5//3 2//3
        f 2//4 6//4 3//4
        f 4//5 3//5 8//5
        f 5//6 1//6 8//6

        v : les coordonnées cartésiennes de chaque vertex
        vn: les coordonnées cartesiennes de chaque normale
        f: index du vertex (dans la liste des "v") et index de la normale (dans la liste des "vn") pour chacun des sommets de la face.

        -
        Edité par SpaceIn 20 août 2018 à 14:01:22

        • Partager sur Facebook
        • Partager sur Twitter

        Comment calculer les normales d'un mesh?

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown