static Mesh GenerateMesh(BSPModelGeometry geometry) { List <Vector3> vertices = new List <Vector3>(); List <int> triangles = new List <int>(); List <Vector2> uvs = new List <Vector2>(); var g = geometry.mesh; for (int vi = 0, ti = 0; vi < g.vertices.Length; vi += 3, ti += 3) { vertices.Add(BSPFile.TransformVector(g.vertices[vi + 0])); vertices.Add(BSPFile.TransformVector(g.vertices[vi + 1])); vertices.Add(BSPFile.TransformVector(g.vertices[vi + 2])); uvs.Add(g.uvs[vi + 0]); uvs.Add(g.uvs[vi + 1]); uvs.Add(g.uvs[vi + 2]); triangles.Add(ti + 2); triangles.Add(ti + 1); triangles.Add(ti + 0); } Mesh mesh = new Mesh(); mesh.name = "Brush Mesh"; mesh.vertices = vertices.ToArray(); mesh.uv = uvs.ToArray(); mesh.triangles = triangles.ToArray(); mesh.RecalculateNormals(); return(mesh); }
static void GenerateBrush(BSPFile bsp, GameObject brush, BSPModelGeometry geometry, IList <Material> materials) { var mesh = GenerateMesh(geometry); var meshFilter = brush.GetComponent <MeshFilter>(); meshFilter.sharedMesh = mesh; var meshRenderer = brush.GetComponent <MeshRenderer>(); meshRenderer.material = materials[(int)geometry.tex_id]; }