Как динамически создать сетку в единстве - PullRequest
0 голосов
/ 08 марта 2019

У меня есть вершина, у которой есть значение цвета.

Я хотел бы создать сетку, используя вершину с такими же значениями цвета.

enter image description here

Это изображение является примером.

Я сделал снимки на своем телефоне Android и произвел сегментацию изображения на объекте

Итак, я получил значение цвета, соответствующее значению координаты.

Мне удалось просто сделать текстуры.пожалуйста, проверьте изображение.enter image description here

Но я хочу объект сетки.

Ниже приведен код текстуры.

var pixel = await this.segmentation.SegmentAsync(rotated, scaled.width, scaled.height);
// int pixel[][];                   // image segmentation using tensorflow

Color transparentColor = new Color32(255, 255, 255, 0);  // transparent
for (int y = 0; y < texture.height; y++)
{
      for (int x = 0; x < texture.width; x++)
      {
             int class_output = pixel[y][x];   

              texture.SetPixel(x, y, pixel[y][x] == 0 ? transparentColor : colors[class_output]);
      }
}
texture.Apply();

Как создать объект сетки

1 Ответ

1 голос
/ 08 марта 2019

1 - Установите префаб с помощью MeshFilter и MeshRenderer.

2 - Переменные внутри скрипта, которые вам нужно будет заполнить.

// This first list contains every vertex of the mesh that we are going to render
public List<Vector3> newVertices = new List<Vector3>();

// The triangles tell Unity how to build each section of the mesh joining
// the vertices
public List<int> newTriangles = new List<int>();

// The UV list is unimportant right now but it tells Unity how the texture is
// aligned on each polygon
public List<Vector2> newUV = new List<Vector2>();


// A mesh is made up of the vertices, triangles and UVs we are going to define,
// after we make them up we'll save them as this mesh
private Mesh mesh;

3 - Инициализация сетки

void Start () {

  mesh = GetComponent<MeshFilter> ().mesh;

  float x = transform.position.x;
  float y = transform.position.y;
  float z = transform.position.z;

  newVertices.Add( new Vector3 (x  , y  , z ));
  newVertices.Add( new Vector3 (x + 1 , y  , z ));
  newVertices.Add( new Vector3 (x + 1 , y-1 , z ));
  newVertices.Add( new Vector3 (x  , y-1 , z ));

  newTriangles.Add(0);
  newTriangles.Add(1);
  newTriangles.Add(3);
  newTriangles.Add(1);
  newTriangles.Add(2);
  newTriangles.Add(3);

  newUV.Add(new Vector2 (tUnit * tStone.x, tUnit * tStone.y + tUnit));
  newUV.Add(new Vector2 (tUnit * tStone.x + tUnit, tUnit * tStone.y + tUnit));
  newUV.Add(new Vector2 (tUnit * tStone.x + tUnit, tUnit * tStone.y));
  newUV.Add(new Vector2 (tUnit * tStone.x, tUnit * tStone.y));

  mesh.Clear ();
  mesh.vertices = newVertices.ToArray();
  mesh.triangles = newTriangles.ToArray();
  mesh.uv = newUV.ToArray(); // add this line to the code here
  mesh.Optimize ();
  mesh.RecalculateNormals ();
 }

Этот код нарисует квадрат в позиции префаба. Если вы продолжите добавлять вершины, вы можете создать более сложную сетку.

Источником информации является учебник по созданию mensh дляместность, похожую на минерата, для получения дополнительной информации проверьте ссылку .

...