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 ?