Bon, j'ai avancé pour mon histoire de "connexion" des mesh, mais j'ai trouvé une méthode qui marche seulement partiellement.
En gros, pour chaque vertice, je cherche la zone la plus proche et la deuxième zone la plus proche. Ensuite, j'attribue le vertex à ces deux zones si la différence de distance avec les deux zones est inférieure à une certaine valeur.
Code : Tout sélectionner
for (int i = 0; i < _nbVertex; i++)
{
float distMin = Mathf.Infinity;
Zone tempZone = null;
Zone secondZone = null;
float dist = 0, dist2 = 0;
foreach (Zone z in _zones)
{
dist = (_vertices[i] - z.CenterZone).sqrMagnitude;
if (dist < distMin)
{
if (tempZone != null)
{
if (dist2 < distMin)
{
dist2 = distMin;
secondZone = tempZone;
}
}
distMin = dist;
tempZone = z;
}
else if (dist2 > dist)
{
dist2 = dist;
secondZone = z;
}
}
tempZone.Vertices.Add(transform.TransformPoint(_vertices[i]));
if (secondZone != null) {
if (Mathf.Abs(distMin-dist2) < .5f)
secondZone.Vertices.Add(transform.TransformPoint(_vertices[i]));
}
}
Sans connexion :
Avec connexion à 0.5f (tout le monde n'est pas connecté) :
Avec connexion à 1f (certains meshs sont trop connectés) :