Генерация и обновление меша

Раздел, посвящённый самому важному - скорости.

Генерация и обновление меша

Сообщение Od1Um 14 июл 2019, 18:06

Друзья!

Нужна помощь при генерации меша.

Создаю набор вершин и полигонов. Храню их в списках.
При создании меша использую следующий код:
Синтаксис:
Используется csharp
int vertexCount = polygons.Length * 3;

            int[] indices = new int[vertexCount];

            Vector3[] vertices = new Vector3[vertexCount];
            Vector3[] normals = new Vector3[vertexCount];
            Vector2[] uv = new Vector2[vertexCount];
            Color32[] colors = new Color32[vertexCount];

            for (int i = 0; i < polygons.Length; i++)
            {
                indices[i * 3 + 0] = i * 3 + 0;
                indices[i * 3 + 1] = i * 3 + 1;
                indices[i * 3 + 2] = i * 3 + 2;

                vertices[i * 3 + 0] = polygons[i].Vertices[0].Position;
                vertices[i * 3 + 1] = polygons[i].Vertices[1].Position;
                vertices[i * 3 + 2] = polygons[i].Vertices[2].Position;

                normals[i * 3 + 0] = polygons[i].Vertices[0].Normal;
                normals[i * 3 + 1] = polygons[i].Vertices[1].Normal;
                normals[i * 3 + 2] = polygons[i].Vertices[2].Normal;

                uv[i * 3 + 0] = polygons[i].Vertices[0].UV;
                uv[i * 3 + 1] = polygons[i].Vertices[1].UV;
                uv[i * 3 + 2] = polygons[i].Vertices[2].UV;

                colors[i * 3 + 0] = polygons[i].Vertices[0].Color;                                              // задаем цвет первой вершины полигона по установленному цвету соответствующего Vertex
                colors[i * 3 + 1] = polygons[i].Vertices[1].Color;                                              // задаем цвет второй вершины полигона по установленному цвету соответствующего Vertex
                colors[i * 3 + 2] = polygons[i].Vertices[2].Color;                                              // задаем цвет третьей вершины полигона по установленному цвету соответствующего Vertex
            }

            mesh.Clear();
            mesh.vertices = vertices;
            mesh.triangles = indices;
            mesh.normals = normals;
            mesh.uv = uv;
            mesh.colors32 = colors;

            if (recalculateNormals) mesh.RecalculateNormals();
            if (recalculateTangents) mesh.RecalculateTangents();
            if (recalculateBounds) mesh.RecalculateBounds();
 


Вопрос:
Если я изменяю позиции вершин - как правильнее - заново пересоздавать весь меш или обновлять позиции его вершин?
Если обновлять, то как? Можете дать совет?
Od1Um
UNец
 
Сообщения: 41
Зарегистрирован: 22 мар 2017, 17:54

Re: Генерация и обновление меша

Сообщение Shekn 15 июл 2019, 12:18

Вот довольно полная статья: https://habr.com/ru/post/428796/

Если коротко, то для обновления местоположений вершин надо изменить значения в массиве vertices и один раз после этого сказать mesh.vertices = vertices. В самом mesh.vertices менять значения по одиночке нельзя.
https://tugcga.github.io/
Аватара пользователя
Shekn
UNIт
 
Сообщения: 95
Зарегистрирован: 05 фев 2016, 14:20

Re: Генерация и обновление меша

Сообщение Od1Um 15 июл 2019, 18:01

Спасибо.

Получается ,в моем случае, проще повторно запустить генератор, раз все равно пересобирать массив вершин.
Od1Um
UNец
 
Сообщения: 41
Зарегистрирован: 22 мар 2017, 17:54


Вернуться в Оптимизация

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1