Skip to content

Instantly share code, notes, and snippets.

@warrickct
Created April 26, 2018 04:03
Show Gist options
  • Save warrickct/adb154cfddbc9b8b1964d96931197a2d to your computer and use it in GitHub Desktop.
Save warrickct/adb154cfddbc9b8b1964d96931197a2d to your computer and use it in GitHub Desktop.
Testing MeshData extraction and Mesh Procedural Generation locally.
public class ThreadNet : MonoBehaviour {
void Start() {
//Testing is mesh is recreatable in unity:
// FOR MAKING SUBMODEL LOCALLY
GameObject localGenModel = new GameObject();
Mesh localGenMesh = new Mesh
{
//tangents = tangents,
vertices = vertices,
normals = normals,
uv = uv,
uv2 = mesh.uv2,
uv3 = mesh.uv3,
uv4 = mesh.uv4,
triangles = triangles,
bounds = mesh.bounds,
};
if (mesh.vertices.Length > 65000)
{
StartCoroutine("CreateSubModel", localGenMesh);
}
//iterate triangles. At each triangle grab the vert, normal, uv at that index. Continue until length of the 3 = 65000.
List<Vector3> subMeshVerts = new List<Vector3>();
List<Vector3> subMeshNormals = new List<Vector3>();
for (int i=0; subMeshVerts.Count < 65000; i++)
{
int index = localGenMesh.triangles[i];
subMeshVerts.Add(localGenMesh.vertices[index]);
subMeshNormals.Add(localGenMesh.normals[index]);
}
int[] subMeshTriangles = localGenMesh.triangles.Take(65000).ToArray();
//Create submesh
Mesh subMesh = new Mesh
{
vertices = subMeshVerts.ToArray(),
normals = subMeshNormals.ToArray(),
triangles = subMeshTriangles,
};
//Generate Game obj, add filter, renderer, assign mesh to filter and renderer
GameObject subModel = new GameObject
{
name = "submodel",
};
subModel.AddComponent<MeshFilter>();
subModel.GetComponent<MeshFilter>().mesh = subMesh;
MeshRenderer subRend = subModel.AddComponent<MeshRenderer>();
Material subMat = subRend.material = new Material(Shader.Find("Standard"));
subMat.name = "submodelMaterial";
*/
/*
localGenMesh.RecalculateBounds();
localGenMesh.RecalculateNormals();
localGenMesh.RecalculateTangents();
localGenModel.AddComponent<MeshFilter>();
localGenModel.GetComponent<MeshFilter>().mesh = localGenMesh;
MeshRenderer localGenModelRenderer = localGenModel.AddComponent<MeshRenderer>();
Material genMaterial = localGenModelRenderer.material = new Material(Shader.Find("Standard"));
genMaterial.name = "GeneratedMaterial";
}
/// <summary>
/// Function for testing if models were being generated correctly without networking
/// </summary>
/// <param name="localGenMesh"></param>
void CreateSubModel(Mesh localGenMesh)
{
List<Vector3> subMeshVerts = new List<Vector3>();
List<Vector3> subMeshNormals = new List<Vector3>();
for (int i = 0; subMeshVerts.Count < 65000; i++)
{
int index = localGenMesh.triangles[i];
subMeshVerts.Add(localGenMesh.vertices[index]);
subMeshNormals.Add(localGenMesh.normals[index]);
Debug.Log("added to submodel lists");
}
int[] subMeshTriangles = localGenMesh.triangles.Take(65000).ToArray();
//Create submesh
Mesh subMesh = new Mesh
{
vertices = subMeshVerts.ToArray(),
normals = subMeshNormals.ToArray(),
triangles = subMeshTriangles,
};
//Generate Game obj, add filter, renderer, assign mesh to filter and renderer
GameObject subModel = new GameObject
{
name = "submodel",
};
subModel.AddComponent<MeshFilter>();
subModel.GetComponent<MeshFilter>().mesh = subMesh;
MeshRenderer subRend = subModel.AddComponent<MeshRenderer>();
Material subMat = subRend.material = new Material(Shader.Find("Standard"));
subMat.name = "submodelMaterial";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment