Example #1
0
 private void applyMesh(LodMesh mesh)
 {
     if (mesh.IsLoaded)
     {
         meshFilter.mesh = mesh.Mesh;
         meshRenderer.material.mainTexture = mesh.Texture;
     }
 }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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);
        }