Проблема вывернутых граней при чтении Mesh
Добавлено: 15 апр 2021, 19:16
Ребят всем привет, столкнулся с проблемой читая бинарный Mesh заранее расшифровав его структуру и в процессе строения модели имею проблему с вывернутыми наизнанку фрагментами модели, нашел информацию что это решается с помощью Vector3.Cross но как это реализовать на примере моей задачи не понял, уже несколько дней совершаю безуспешные попытки, мне необходимо чтобы все полигоны были вывернуты от центра модели наружу, судя по всему из за вывернутых частей у меня так же не ложиться правильно UV за исключением одной стороны.
Синтаксис:
Используется csharp
public void CreateMesh()
{
GameObject gameModel = new GameObject(MeshChunk.Identifier);
gameModel.AddComponent<MeshRenderer>();
gameModel.AddComponent<MeshFilter>();
gameModel.GetComponent<MeshRenderer>().material = testTexture;
Mesh mesh = gameModel.GetComponent<MeshFilter>().mesh;
mesh.vertices = MeshChunk._vertices.ToArray();
mesh.uv = MeshChunk._UVs.ToArray();
mesh.triangles = MeshChunk._triangles.ToArray();
int[] tris = mesh.triangles;
for (int i = 0; i < tris.Length; i += 3)
{
Vector3 a = mesh.vertices[tris[i]];
Vector3 b = mesh.vertices[tris[i + 1]];
Vector3 c = mesh.vertices[tris[i + 2]];
Vector3 n0 = mesh.normals[tris[i]] + mesh.normals[tris[i + 1]] + mesh.normals[tris[i + 2]];
n0 = (n0 / 3.0f).normalized;
Vector3 n1 = Vector3.Cross((b - a).normalized, (c - a).normalized); // данный пример я нашел на официальном форуме но заставить его работать с моей моделью не смог
}
}
{
GameObject gameModel = new GameObject(MeshChunk.Identifier);
gameModel.AddComponent<MeshRenderer>();
gameModel.AddComponent<MeshFilter>();
gameModel.GetComponent<MeshRenderer>().material = testTexture;
Mesh mesh = gameModel.GetComponent<MeshFilter>().mesh;
mesh.vertices = MeshChunk._vertices.ToArray();
mesh.uv = MeshChunk._UVs.ToArray();
mesh.triangles = MeshChunk._triangles.ToArray();
int[] tris = mesh.triangles;
for (int i = 0; i < tris.Length; i += 3)
{
Vector3 a = mesh.vertices[tris[i]];
Vector3 b = mesh.vertices[tris[i + 1]];
Vector3 c = mesh.vertices[tris[i + 2]];
Vector3 n0 = mesh.normals[tris[i]] + mesh.normals[tris[i + 1]] + mesh.normals[tris[i + 2]];
n0 = (n0 / 3.0f).normalized;
Vector3 n1 = Vector3.Cross((b - a).normalized, (c - a).normalized); // данный пример я нашел на официальном форуме но заставить его работать с моей моделью не смог
}
}