cherche add-on convertissant mesh en vertices,aretes,faces,normales

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
Kaloverian
Messages : 345
Inscription : 10 Août 2016 03:03

cherche add-on convertissant mesh en vertices,aretes,faces,normales

Message par Kaloverian » 25 Fév 2022 15:26

bonjour,

j'ai récupéré un script cs qui construit un cube de manière procédurale:

Code : Tout sélectionner

//tiré de: http://www.theappguruz.com/blog/simple-cube-mesh-generation-unity3d

using UnityEngine;
using System.Collections;

public class build_cube4 : MonoBehaviour
{
    /// <summary>
    /// Length of the Cube
    /// </summary>
    public float cubeLength;

    /// <summary>
    /// width of the Cube
    /// </summary>
    public float cubeWidth;

    /// <summary>
    /// Height of the Cube
    /// </summary>
    public float cubeHeight;

    /// <summary>
    /// Mesh used to generate cube
    /// </summary>
    private Mesh cubeMesh;

    private Material cubeMat;
    // Use this for initialization
    void Start()
    {
        MakeCube();
        //pas avant
        for(int a=0;a<8;a++)
        {
             print("vertices: \n"+GetVertices()[a]);
        }
      
    }

    /// <summary>
    /// Get Vertices of the cube
    /// </summary>
    /// <returns></returns>
    private Vector3[] GetVertices()
    {
        Vector3 vertice_0 = new Vector3(-cubeLength * .5f, -cubeWidth * .5f, cubeHeight * .5f);
        Vector3 vertice_1 = new Vector3(cubeLength * .5f, -cubeWidth * .5f, cubeHeight * .5f);
        Vector3 vertice_2 = new Vector3(cubeLength * .5f, -cubeWidth * .5f, -cubeHeight * .5f);
        Vector3 vertice_3 = new Vector3(-cubeLength * .5f, -cubeWidth * .5f, -cubeHeight * .5f);

        Vector3 vertice_4 = new Vector3(-cubeLength * .5f, cubeWidth * .5f, cubeHeight * .5f);
        Vector3 vertice_5 = new Vector3(cubeLength * .5f, cubeWidth * .5f, cubeHeight * .5f);
        Vector3 vertice_6 = new Vector3(cubeLength * .5f, cubeWidth * .5f, -cubeHeight * .5f);
        Vector3 vertice_7 = new Vector3(-cubeLength * .5f, cubeWidth * .5f, -cubeHeight * .5f);

        Vector3[] vertices = new Vector3[]
				{
				// Bottom Polygon
					vertice_0, vertice_1, vertice_2, vertice_3,
					
				// Left Polygon
					vertice_7, vertice_4, vertice_0, vertice_3,
					
				// Front Polygon
					vertice_4, vertice_5, vertice_1, vertice_0,
					
				// Back Polygon
					vertice_6, vertice_7, vertice_3, vertice_2,
					
				// Right Polygon
					vertice_5, vertice_6, vertice_2, vertice_1,
					
				// Top Polygon
					vertice_7, vertice_6, vertice_5, vertice_4
				};

                 Vector3[] vertices2 = new Vector3[]
				{
				// Bottom Polygon
					vertice_0, vertice_1, vertice_2, vertice_3,
					
				// Left Polygon
					vertice_4, vertice_5, vertice_6, vertice_7
					
				// Front Polygon
				
				};


        return vertices;
    }
    /// <summary>
    /// The Cube Side Which Are Use when rendering Cube
    /// </summary>
    /// <returns>The normals.</returns>
    private Vector3[] GetNormals()
    {
        Vector3 up = Vector3.up;
        Vector3 down = Vector3.down;
        Vector3 front = Vector3.forward;
        Vector3 back = Vector3.back;
        Vector3 left = Vector3.left;
        Vector3 right = Vector3.right;

        Vector3[] normales = new Vector3[]
		{
				// Bottom Side Render
					down, down, down, down,
					
				// LEFT Side Render
					left, left, left, left,
					
				// FRONT Side Render
					front, front, front, front,
					
				// BACK Side Render
					back, back, back, back,
					
				// RIGTH Side Render
					right, right, right, right,
					
				// UP Side Render
					up, up, up, up
				};

        return normales;
    }
    /// <summary>
    /// Get the UVs Map of the cube
    /// </summary>
    /// <returns></returns>
    private Vector2[] GetUVsMap()
    {
        Vector2 _00_CORDINATES = new Vector2(0f, 0f);
        Vector2 _10_CORDINATES = new Vector2(1f, 0f);
        Vector2 _01_CORDINATES = new Vector2(0f, 1f);
        Vector2 _11_CORDINATES = new Vector2(1f, 1f);

        Vector2[] uvs = new Vector2[]
				{
				// Bottom
					_11_CORDINATES, _01_CORDINATES, _00_CORDINATES, _10_CORDINATES,
					
				// Left
					_11_CORDINATES, _01_CORDINATES, _00_CORDINATES, _10_CORDINATES,
					
				// Front
					_11_CORDINATES, _01_CORDINATES, _00_CORDINATES, _10_CORDINATES,
					
				// Back
					_11_CORDINATES, _01_CORDINATES, _00_CORDINATES, _10_CORDINATES,
					
				// Right
					_11_CORDINATES, _01_CORDINATES, _00_CORDINATES, _10_CORDINATES,
					
				// Top
					_11_CORDINATES, _01_CORDINATES, _00_CORDINATES, _10_CORDINATES,
				};
        return uvs;
    }
    /// <summary>
    /// Get the triangle
    /// </summary>
    /// <returns></returns>
    private int[] GetTriangles()
    {
        int[] triangles = new int[]
				{
				// Cube Bottom Side Triangles
					3, 1, 0,
				    3, 2, 1,			
					
				// Cube Left Side Triangles
					3 + 4 * 1, 1 + 4 * 1, 0 + 4 * 1,
					3 + 4 * 1, 2 + 4 * 1, 1 + 4 * 1,
					
				// Cube Front Side Triangles
					3 + 4 * 2, 1 + 4 * 2, 0 + 4 * 2,
					3 + 4 * 2, 2 + 4 * 2, 1 + 4 * 2,
					
				// Cube Back Side Triangles
					3 + 4 * 3, 1 + 4 * 3, 0 + 4 * 3,
					3 + 4 * 3, 2 + 4 * 3, 1 + 4 * 3,
					
				// Cube Rigth Side Triangles
					3 + 4 * 4, 1 + 4 * 4, 0 + 4 * 4,
					3 + 4 * 4, 2 + 4 * 4, 1 + 4 * 4,
					
				// Cube Top Side Triangles
					3 + 4 * 5, 1 + 4 * 5, 0 + 4 * 5,
					3 + 4 * 5, 2 + 4 * 5, 1 + 4 * 5,
					
				};
        return triangles;
    }
   /// <summary>
   /// Gets the Mesh
   /// </summary>
   /// <returns></returns>
    private Mesh GetCubeMesh()
    {

        if (GetComponent<MeshFilter>() == null)
        {
            Mesh mesh;
            MeshFilter filter = gameObject.AddComponent<MeshFilter>();
            mesh = filter.mesh;
            mesh.Clear();
            return mesh;
        }
        else
        {
            return gameObject.AddComponent<MeshFilter>().mesh;
        }
    }

  
    /// <summary>
    /// Makes the Cube
    /// </summary>
    void MakeCube()
    {
        cubeMesh = GetCubeMesh();
        cubeMesh.vertices = GetVertices();
        cubeMesh.normals = GetNormals();
        cubeMesh.uv = GetUVsMap();
        cubeMesh.triangles = GetTriangles();
        cubeMesh.RecalculateBounds();
        cubeMesh.RecalculateNormals();
        cubeMesh.Optimize();
    }


}

A l'inverse,je modélise un mesh quelconque retouché meme avec ProBUilder,je souhatre savoir s'il existe un add-on qui me rend le script cs comme ci-dessus de ce mesh modélisé personnellement.

merci de votre aide

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6228
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: cherche add-on convertissant mesh en vertices,aretes,faces,normales

Message par boubouk50 » 25 Fév 2022 15:37

La demande est un peu bizarre en soi...
la classe Mesh te donne toutes les infos du mesh: Vertices, triangles, Normales, UVs, etc.
Tu peux donc accéder à ces données directement, tu peux les stocker si tu veux et créer un script depuis elles, mais bon.
C'est quoi l'idée?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Kaloverian
Messages : 345
Inscription : 10 Août 2016 03:03

Re: cherche add-on convertissant mesh en vertices,aretes,faces,normales

Message par Kaloverian » 25 Fév 2022 15:56

Je ne comprends pas trop....
Dans aucune méthode de https://docs.unity3d.com/2018.3/Documen ... /Mesh.html
il n'y a la possibilité d'iy insérer mon GameObject

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6228
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: cherche add-on convertissant mesh en vertices,aretes,faces,normales

Message par boubouk50 » 25 Fév 2022 17:45

Non mais c'est l'inverse. Ton gameObject possède forcément un Mesh donc tu as accès aux données que tu cherches.
Mais en aucun cas cela fait magiquement ce que tu veux...
Je n'ai toujours pas compris ce que tu veux faire d'ailleurs, peux tu expliquer stp? Parce que je ne suis pas bien sûr que tu aies complètement saisi ce qu'est un mesh procédural. Le but principal du procédural est quand même de paramétriser la conception d'un mesh, pas simplement de le "scripter".
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Kaloverian
Messages : 345
Inscription : 10 Août 2016 03:03

Re: cherche add-on convertissant mesh en vertices,aretes,faces,normales

Message par Kaloverian » 25 Fév 2022 18:38

J'ajoute un objet quelconque dans la scène
Automatiquement,un MeshFilter et un MeshRenderer sont associés dans l'inspector.
Après?Que puis-je faire pour obtenir tous les vertices,edges,faces,normales?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6228
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: cherche add-on convertissant mesh en vertices,aretes,faces,normales

Message par boubouk50 » 25 Fév 2022 18:42

boubouk50 a écrit :
25 Fév 2022 17:45
Je n'ai toujours pas compris ce que tu veux faire d'ailleurs, peux tu expliquer stp? Parce que je ne suis pas bien sûr que tu aies complètement saisi ce qu'est un mesh procédural. Le but principal du procédural est quand même de paramétriser la conception d'un mesh, pas simplement de le "scripter".
Peux-tu répondre à ma question que j'ai déjà posé deux fois stp?

Depuis un script tu accèdes au Component MeshFilter de ton gameObjet. Celui là te donne accès à ton Mesh qui te donne accès aux tableaux de sommets, d'UVs, de normales et de faces. Ensuite, à toi d'en faire ce que tu veux.
Là comme ça, tu reprends le template de ton script, et tu recrées en modifiant les valeurs de cube par celles de ton nouveau mesh.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Scripting »