Created
April 26, 2018 04:03
-
-
Save warrickct/adb154cfddbc9b8b1964d96931197a2d to your computer and use it in GitHub Desktop.
Testing MeshData extraction and Mesh Procedural Generation locally.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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