Page 1 sur 1

[MY-AL] Calculer surfaces et positions des polygons d'un mesh

Publié : 06 Nov 2020 17:30
par Blownn
Bonjour :)

Voici mon problème, j'aurais besoin de récupérer différentes infos sur les polygones qui composent un mesh relativement lowpoly (entre 30 et 60 triangles).

J'aimerais storer au Start, dans un/des tableaux l’ensemble des polygones du mesh en question
L'idée est de pouvoir ensuite faire appel à chaque polygone indépendamment et avoir accès à sa surface, sa position.. etc

Je me débrouille plutôt sur Unity ayant déjà programmé plusieurs jeux et applications 3D mais j'ai vraiment aucunes connaissances sur la manipulation d'un mesh.
J'ai pu trouver des infos sur le calcul de surfaces, la position et l'orientation de poly mais pas moyen de comprendre comment mixer tout ça pour arriver à mes fins :gene:

Merci d'avance à tous ceux qui passeront par là :hello: !

Re: [MY-AL] Calculer surfaces et positions des polygons d'un mesh

Publié : 06 Nov 2020 19:20
par Max
Bonsoir,

as-tu regardé du coté des paramètre des Mesh ?
Tu peux récupérer l'ensemble de info liées au maillage de ton mesh.

Re: [MY-AL] Calculer surfaces et positions des polygons d'un mesh

Publié : 07 Nov 2020 16:35
par Blownn
Salut,
j'ai regardé les paramètres des Mesh oui, encore aujourd'hui, je vois bien que c'est ce qu'il me faut mais j'arrive vraiment pas à comprendre comment me servir de ça.

Une fois que j'ai mes array vertices et triangles, comment je peut accéder à la position de chaque triangles ?
Est-ce que je dois moi même faire un calcul avec les positions des trois points du triangle en question?

Re: [MY-AL] Calculer surfaces et positions des polygons d'un mesh

Publié : 07 Nov 2020 17:15
par Max
Blownn a écrit :
07 Nov 2020 16:35
Une fois que j'ai mes array vertices et triangles, comment je peut accéder à la position de chaque triangles ?
Est-ce que je dois moi même faire un calcul avec les positions des trois points du triangle en question?
Là il te faut reprendre les fondamentaux sur la constitution des mesh (maillage, vertices, etc...)
Dans ton cas tu auras un tableau de vertices d'un coté et de l'autre le tableau des indexs formant les tri.
Par exemple le premier tri sera formé avec le vertex[id[0]], le vertex[id[1]]et enfin le vertex[id[2]]. Et ainsi de suite pour chaque tri.

Re: [MY-AL] Calculer surfaces et positions des polygons d'un mesh

Publié : 07 Nov 2020 19:56
par Blownn
Oui je vois, voici ce que j'ai aujourd'hui
La pièce jointe Capture_01.PNG n’est plus disponible
Capture_01.PNG
Capture in game
Capture_01.PNG (275.28 Kio) Consulté 276 fois
Je retrouve le bon nombre de vertex et de poly. Je fait un Raycast sur les positions estimées des poly pour vérifier.
Il semblerais que ça fonctionne pour certain et pas pour d'autres. Certain raycast sont lancés depuis l'interieur du mesh comme si sa position était calculée avec des points qui ne sont pas reliés..
Est-il possible que le vertex 4 d'un mesh ne soit pas rattaché aux 2 et 3 ?

Re: [MY-AL] Calculer surfaces et positions des polygons d'un mesh

Publié : 07 Nov 2020 20:15
par Max
Blownn a écrit :
07 Nov 2020 19:56
Je fait un Raycast sur les positions estimées des poly pour vérifier.
Il semblerais que ça fonctionne pour certain et pas pour d'autres. Certain raycast sont lancés depuis l’intérieur du mesh
je dirais normal, si tu cherches à faire un Raycast par "l'arrière" d'une face, tu n'auras pas de résultats. Le test doit toujours se faire vers le plan orienté par la normale de la face. On ne fait pas de test fiable à partir de l’intérieur d'un mesh.
Blownn a écrit :
07 Nov 2020 19:56
Est-il possible que le vertex 4 d'un mesh ne soit pas rattaché aux 2 et 3 ?
oui bien sur. Les vertices dans le tableau ne sont bien souvent en rien organisé de manière contigües. Ce sont les Id
(contenu dans le tableau Triangles ) qui comptent pour déterminer l'organisation des faces.

PS: ne poste pas de screen de ton code, c'est souvent inexploitable et interdit tout copié/collé si quelqu'un veut par exemple tester. Poste le script directement, entre les bonnes balises (Cf la charte, lien dans ma signature)

Re: [MY-AL] Calculer surfaces et positions des polygons d'un mesh

Publié : 10 Nov 2020 18:46
par Blownn
Hey :)

Alors voilà, j'ai fait quelques modifs et essayé pas mal de chose cet aprèm mais j'ai toujours un soucis.
J'ai besoin de récupérer les normals de chaque poly, et je n'arrive pas à faire correspondre la bonne normal au bon poly. :?
J'imagine que le "Mesh.Normals" classe les normals dans un autre ordre encore que le "Mesh.Triangles" ..


Voici ce que j'ai pour le moment:

Code : Tout sélectionner

public class AeroDynamicMesh : MonoBehaviour
{     

    Vector3[] posTrianglesA;     			//Tableau position polygons
    Vector3[] meshVertexA;    			//Tableau vertex
    Vector3[] meshNormalsA;    //Tableau vertex

    int[] meshTrianglesA;       //tableau polygons du mesh

    // Start is called before the first frame update
    void Start()
    {
        Mesh aeroMesh = GetComponent<MeshFilter>().mesh;

        meshVertexA = aeroMesh.vertices;                        //tableau vertex init
        meshTrianglesA = aeroMesh.triangles;                    //tableau poly init
        meshNormalsA = aeroMesh.normals;                        

        posTrianglesA = new Vector3[meshTrianglesA.Length];     //tableau Position poly init 


       //   UnityEngine.Debug.Log("VertexCount = " + meshVertexA.Length/3);             //Check
       //   UnityEngine.Debug.Log("PolyCount = " + meshTrianglesA.Length/3);            //Check
       //   UnityEngine.Debug.Log("NormalsCount = " + meshNormalsA.Length);             //Check
    }

    private void Update()
    {
        //Definition des vector3 de chaques poly

        for (int i = 0; i < meshTrianglesA.Length / 3; i++)
        {

            // UnityEngine.Debug.Log("Entree");
            posTrianglesA[i] = new Vector3(((transform.TransformPoint(meshVertexA[meshTrianglesA[i * 3 + 0]]).x) + (transform.TransformPoint(meshVertexA[meshTrianglesA[i * 3 + 1]]).x) + (transform.TransformPoint(meshVertexA[meshTrianglesA[i * 3 + 2]]).x)) / 3,
                                            ((transform.TransformPoint(meshVertexA[meshTrianglesA[i * 3 + 0]]).y) + (transform.TransformPoint(meshVertexA[meshTrianglesA[i * 3 + 1]]).y) + (transform.TransformPoint(meshVertexA[meshTrianglesA[i * 3 + 2]]).y)) / 3,
                                            ((transform.TransformPoint(meshVertexA[meshTrianglesA[i * 3 + 0]]).z) + (transform.TransformPoint(meshVertexA[meshTrianglesA[i * 3 + 1]]).z) + (transform.TransformPoint(meshVertexA[meshTrianglesA[i * 3 + 2]]).z)) / 3
                                             );

            UnityEngine.Debug.DrawRay(posTrianglesA[i], meshNormalsA[i], Color.magenta);     //CHECK

        }
    
    }
Quand je teste sur un cube, les deux premières normals s'affichent correctement puis, plus aucune normals n'est dans la bonne direction.
D'après moi la normale récupérée dans meshNormalsA ne correspond pas au poly au poly du même ID, enfin c'est que je comprend ici.
Comment je peux faire pour faire correspondre la normal au bon poly ?

Re: [MY-AL] Calculer surfaces et positions des polygons d'un mesh

Publié : 10 Nov 2020 19:56
par Max
Bonsoir,

le tableau des normales contient les normales des vertices et non des tri, comme spécifié dans la doc.
Si tu as (comme pour un cube) 36 vertices, alors tu auras les 36 normales correspondantes.