static void applyHeightMap(Vector3[] vertices, IXHeightMap heightMap) { for (int i = 0; i < vertices.Length; i++) { Vector3 vertex = vertices[i]; vertices[i].y = heightMap.yFor(vertex.x, vertex.z); } }
public CaveMesh create(OIGrid grid, int wallHeight) { //grid = grid.mirror(); grid = grid.rotate90(); IXHeightMap floorHeight = new XFlatHeightMap(0); //IXHeightMap ceilHeight = new XFlatHeightMap(wallHeight); IXHeightMap ceilHeight = _ceilHeightMap; Mesh floorMesh = createPlaneMesh(grid.invert(), floorHeight); Mesh ceilMesh = createPlaneMesh(grid, ceilHeight); Mesh wallMesh = createWallMesh(grid, floorHeight, ceilHeight); return(new CaveMesh(ceilMesh, wallMesh, floorMesh)); }
static Mesh createPlaneMesh(OIGrid grid, IXHeightMap heightMap) { Mesh mesh = new XTriangulator().triangolate(grid); Vector3[] vert = mesh.vertices; //NOTA: mesh.vertices ritorna un CLONE mesh.uv = flatUVfor(vert); applyHeightMap(vert, heightMap); mesh.vertices = vert; mesh.RecalculateBounds(); mesh.RecalculateNormals(); //TANGENTS ???? return(mesh); }
private Mesh createWallMesh(OIGrid grid, IXHeightMap floorHeighMap, IXHeightMap ceilHeightMap) { int[,] map = grid.asMatrix(); Vector3 center = new Vector3(-map.GetLength(1) / 2f + 0.5f, 0, -map.GetLength(0) / 2f + 0.5f); int squareSize = 1; List <Vector3[]> outlines = XOutlineGenerator.Generate(grid, center, squareSize); XMeshAdapter meshAdapter = new XMeshAdapter(); meshAdapter.vertices = XWallBuilder.GetVertices(outlines, floorHeighMap, ceilHeightMap); meshAdapter.uv = XWallBuilder.GetUVs(outlines, meshAdapter.vertices); meshAdapter.triangles = XWallBuilder.GetTriangles(outlines); return(meshAdapter.asMesh()); }
/* * public static MeshData Build(WallGrid grid, IHeightMap floorHeightMap, IHeightMap ceilingHeightMap) * { * List<Vector3[]> outlines = OutlineGenerator.Generate(grid); * * MeshData mesh = new MeshData(); * mesh.vertices = GetVertices(outlines, floorHeightMap, ceilingHeightMap); * mesh.uv = GetUVs(outlines, mesh.vertices); * mesh.triangles = GetTriangles(outlines); * return mesh; * } */ public static Vector3[] GetVertices(List <Vector3[]> outlines, IXHeightMap floorHeightMap, IXHeightMap ceilHeightMap) { int numWallVertices = 2 * outlines.Sum(outline => outline.Length); var vertices = new Vector3[numWallVertices]; int vertexIndex = 0; foreach (Vector3[] outline in outlines) { for (int i = 0; i < outline.Length; i++) { Vector3 vertex = outline[i]; float x = vertex.x; float z = vertex.z; //vertices[vertexIndex++] = new Vector3(x, ceilingHeightMap.GetHeight(x, z), z); //vertices[vertexIndex++] = new Vector3(x, floorHeightMap.GetHeight(x, z), z); vertices[vertexIndex++] = new Vector3(x, floorHeightMap.yFor(x, z), z); vertices[vertexIndex++] = new Vector3(x, ceilHeightMap.yFor(x, z), z); } } return(vertices); }
public CaveMeshFactory(IXHeightMap ceilHeightMap) { _ceilHeightMap = ceilHeightMap; }