private void applyMesh(LodMesh mesh) { if (mesh.IsLoaded) { meshFilter.mesh = mesh.Mesh; meshRenderer.material.mainTexture = mesh.Texture; } }
public async Task Update(MapGenerator generator, int levelOfDetail) { if (IsVisible) { LodMesh mesh = meshes[levelOfDetail]; if (mesh == null) { meshes[levelOfDetail] = new LodMesh(levelOfDetail); Debug.Log(string.Format("Chunk [{0}, {1}, {2}] Creating mesh", coord.x, coord.y, levelOfDetail)); meshes[levelOfDetail] = await createMesh(generator, levelOfDetail); Debug.Log(string.Format("Chunk [{0}, {1}, {2}] Mesh created", coord.x, coord.y, levelOfDetail)); mesh = meshes[levelOfDetail]; } else { applyMesh(mesh); } } }
private async Task <LodMesh> createMesh(MapGenerator generator, int levelOfDetail) { (Map, MeshBuilder)result = await Task.Run(() => { Map map = generator.GenerateMap(coord); MeshBuilder builder = TerrainMeshGenerator.GenerateFlatTerrainMesh(map.heightMap, levelOfDetail); return(map, builder); }); var texture = new Texture2D(result.Item1.heightMap.Width, result.Item1.heightMap.Height); texture.SetPixels(result.Item1.colorMap); texture.wrapMode = TextureWrapMode.Clamp; texture.filterMode = FilterMode.Point; // makes changes between regions more rough texture.Apply(); LodMesh mesh = new LodMesh(levelOfDetail); mesh.Load(result.Item2.Build(), texture); return(mesh); }