Advertisement
Guest User

Mesh generation

a guest
Apr 18th, 2014
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.53 KB | None | 0 0
  1. public static GameObject GenerateOne(Texture2D tex, int sizeX, int sizeY)
  2.     {
  3.         //Generate Table 20x20
  4.         int[,] tab = new int[sizeY, sizeX];
  5.         for (int index00 = 0; index00 < tab.GetLength(0); index00++)
  6.             for (int index01 = 0; index01 < tab.GetLength(1); index01++)
  7.                 tab[index00, index01] = Random.Range(0, 2);
  8.  
  9.         var obj = new GameObject();
  10.  
  11.         var mf = obj.AddComponent<MeshFilter>();
  12.         obj.AddComponent<MeshRenderer>();
  13.         var mesh = new Mesh();
  14.         mf.mesh = mesh;
  15.  
  16.         int licznik = 0;
  17.         foreach (var element in tab)
  18.         {
  19.             if (element == 1)
  20.                 licznik++;
  21.         }
  22.         var vertices = new Vector3[licznik * 6];
  23.         var tri = new int[licznik * 6];
  24.         var normals = new Vector3[licznik * 6];
  25.         var uv = new Vector2[licznik * 6];
  26.         licznik = 0;
  27.         int iMax = tab.GetUpperBound(0);
  28.         int jMax = tab.GetUpperBound(1);
  29.         for (float i = 0; i <= tab.GetUpperBound(0); i++)
  30.             for (float j = 0; j <= tab.GetUpperBound(1); j++)
  31.                 if (tab[(int)i, (int)j] == 1)
  32.                 {
  33.                     iMax++;
  34.                     jMax++;
  35.  
  36.                     //prawa góra trójkąt
  37.                     vertices[licznik] = new Vector3(i + 1, 0, j + 1); //prawa góra
  38.                     tri[licznik] = licznik;
  39.                     normals[licznik] = new Vector3(0.5f,0,0.5f);
  40.                     uv[licznik++] = new Vector2((i + 1) / iMax, (j + 1) / jMax);
  41.  
  42.                     vertices[licznik] = new Vector3(i + 1, 0, j); //prawa dół
  43.                     tri[licznik] = licznik;
  44.                     normals[licznik] = new Vector3(0.5f, 0, -0.5f);
  45.                     uv[licznik++] = new Vector2((i + 1) / iMax, (j) / jMax);
  46.  
  47.                     vertices[licznik] = new Vector3(i, 0, j + 1); //lewa góra
  48.                     tri[licznik] = licznik;
  49.                     normals[licznik] = new Vector3(-0.5f, 0, 0.5f);
  50.                     uv[licznik++] = new Vector2((i) / iMax, (j + 1) / jMax);
  51.  
  52.                     //lewy dół trójkąt
  53.                     vertices[licznik] = new Vector3(i + 1, 0, j); //prawa dół
  54.                     tri[licznik] = licznik;
  55.                     normals[licznik] = -Vector3.forward;
  56.                     uv[licznik++] = new Vector2((i + 1) / iMax, (j) / jMax);
  57.  
  58.                     vertices[licznik] = new Vector3(i, 0, j); //lewa dół
  59.                     tri[licznik] = licznik;
  60.                     normals[licznik] = new Vector3(0.5f, 0, 0.5f);
  61.                     uv[licznik++] = new Vector2((i) / iMax, (j) / jMax);
  62.  
  63.                     vertices[licznik] = new Vector3(i, 0, j + 1); // lewa góra
  64.                     tri[licznik] = licznik;
  65.                     normals[licznik] = new Vector3(-0.5f, 0, 0.5f);
  66.                     uv[licznik++] = new Vector2((i) / iMax, (j + 1) / jMax);
  67.  
  68.                     iMax--;
  69.                     jMax--;
  70.                 }
  71.  
  72.         mesh.vertices = vertices;
  73.         mesh.triangles = tri;
  74.         mesh.normals = normals;
  75.         mesh.uv = uv;
  76.  
  77.         var coll = obj.AddComponent<BoxCollider>();
  78.         coll.size = new Vector3(coll.size.x, 0.2f, coll.size.z);
  79.         coll.center = new Vector3(coll.center.x, -0.1f, coll.center.z);
  80.         obj.renderer.material.mainTexture = tex;
  81.  
  82.         return obj;
  83.     }
  84. public static GameObject GenerateMany(Texture2D tex, int sizeX, int sizeY)
  85.     {
  86.         //Generate Table 20x20
  87.         int[,] tab = new int[sizeY, sizeX];
  88.         for (int index00 = 0; index00 < tab.GetLength(0); index00++)
  89.             for (int index01 = 0; index01 < tab.GetLength(1); index01++)
  90.                 tab[index00, index01] = Random.Range(0, 2);
  91.  
  92.         var obj = new GameObject();
  93.  
  94.         var mf = obj.AddComponent<MeshFilter>();
  95.         obj.AddComponent<MeshRenderer>();
  96.         var mesh = new Mesh();
  97.         mf.mesh = mesh;
  98.  
  99.         int licznik = 0;
  100.         foreach (var element in tab)
  101.         {
  102.             if (element == 1)
  103.                 licznik++;
  104.         }
  105.         var vertices = new Vector3[licznik * 6];
  106.         var tri = new int[licznik * 6];
  107.         var uv = new Vector2[licznik * 6];
  108.         licznik = 0;
  109.         for (int i = 0; i <= tab.GetUpperBound(0); i++)
  110.             for (int j = 0; j <= tab.GetUpperBound(1); j++)
  111.                 if (tab[i, j] == 1)
  112.                 {
  113.                     vertices[licznik] = new Vector3(i + 1, 0, j + 1);
  114.                     tri[licznik] = licznik;
  115.                     uv[licznik++] = new Vector2(1, 1);
  116.  
  117.                     vertices[licznik] = new Vector3(i + 1, 0, j);
  118.                     tri[licznik] = licznik;
  119.                     uv[licznik++] = new Vector2(1, 0);
  120.  
  121.                     vertices[licznik] = new Vector3(i, 0, j + 1);
  122.                     tri[licznik] = licznik;
  123.                     uv[licznik++] = new Vector2(0, 1);
  124.  
  125.  
  126.                     vertices[licznik] = new Vector3(i + 1, 0, j);
  127.                     tri[licznik] = licznik;
  128.                     uv[licznik++] = new Vector2(1, 0);
  129.  
  130.                     vertices[licznik] = new Vector3(i, 0, j);
  131.                     tri[licznik] = licznik;
  132.                     uv[licznik++] = new Vector2(0, 0);
  133.  
  134.                     vertices[licznik] = new Vector3(i, 0, j + 1);
  135.                     tri[licznik] = licznik;
  136.                     uv[licznik++] = new Vector2(0, 1);
  137.                 }
  138.  
  139.         mesh.vertices = vertices;
  140.         mesh.triangles = tri;
  141.         mesh.uv = uv;
  142.  
  143.         var coll = obj.AddComponent<BoxCollider>();
  144.         coll.size = new Vector3(coll.size.x, 0.2f, coll.size.z);
  145.         coll.center = new Vector3(coll.center.x, -0.1f, coll.center.z);
  146.         obj.renderer.material.mainTexture = tex;
  147.  
  148.         return obj;
  149.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement