예제 #1
0
        protected override void OnRequest(IWorld world, Rectangle range)
        {
            for (int j = range.Left; j < range.Right; j += Const.GRID)
            {
                int mat = PerlinNoiseGenerator.RandomProp(1001, j / Const.GRID, 20) % 20;

                for (int i = 1; i <= 3; ++i)
                {
                    if (
                        mat < 1 ||
                        mat < 2 && PerlinNoiseGenerator.Random(1002, j / Const.GRID * 123 + i * 45) % 2 == 0)
                    {
                        AddObject("Stair", world, new Point(j, range.Bottom - i * Const.GRID));
                    }
                    else
                    {
                        AddObject("Floor", world, new Point(j, range.Bottom - i * Const.GRID));
                    }
                }

                RunChild2(world, new Rectangle(j, range.Bottom - 4 * Const.GRID, Const.GRID, Const.GRID), PerlinNoiseGenerator.Random(23335, j / Const.GRID));
            }

            for (int j = range.Left, k; j < range.Right; j = k)
            {
                Tuple <int, int> pair = PerlinNoiseGenerator.RandomSplit(34567, j / Const.GRID, 8);
                k = Math.Min(pair.Item2 * Const.GRID, range.Right);

                Rectangle subRange = new Rectangle(j, world.Boundary.Top, k - j, world.Boundary.Height - 5 * Const.GRID);
                RunChild(world, subRange, PerlinNoiseGenerator.Random(23335, pair.Item1));
            }
        }
예제 #2
0
        protected override void OnRequest(IWorld world, Rectangle range)
        {
            for (int j = range.Left; j < range.Right; j += Const.GRID)
            {
                int mat = PerlinNoiseGenerator.RandomProp(1001, j / Const.GRID, 20) % 20;

                int i = PerlinNoiseGenerator.RandomProp(8765, j / Const.GRID, 4) % 5 + 2;
                int k = PerlinNoiseGenerator.RandomProp(8765, j / Const.GRID, 4) % 2 - 1;

                if (j == range.Left || j == range.Right - Const.GRID)
                {
                    k = 0;
                }

                if (mat == 4 || mat == 5 || mat == 6)
                {
                    AddObject("Brick", world, new Point(j + k * Const.GRID, range.Bottom - i * Const.GRID));
                }
                else if (mat == 7)
                {
                    AddObject("Question", world, new Point(j + k * Const.GRID, range.Bottom - i * Const.GRID));
                }
                else if (mat < 2 || mat < 4 && PerlinNoiseGenerator.Random(8766, range.Left / Const.GRID + i) % 2 != 0)
                {
                    AddObject("Stair", world, new Point(j + k * Const.GRID, range.Bottom - i * Const.GRID));
                }
                else
                {
                    AddObject("Floor", world, new Point(j + k * Const.GRID, range.Bottom - i * Const.GRID));
                }

                RunChild2(world, new Rectangle(j, range.Bottom - (i + 1) * Const.GRID, Const.GRID, Const.GRID), PerlinNoiseGenerator.Random(23335, j / Const.GRID));
            }
        }
예제 #3
0
    public void GenerateTerrain()
    {
        //Load in the heightMap from the resources folder
        tex = LoadPNG("Assets/Resources/heightMap.png");


        //used in height map

        int iTotalVertices = (width + 1) * (height + 1);

        _vertices = new Vector3[iTotalVertices];

        _normals = new Vector3[iTotalVertices];

        _uvs = new Vector2[iTotalVertices];

        numIndicies = height * width * 6;

        _triangles = new int[numIndicies];

        //Noise map
        vertices = new Vector3[width * height];

        normals = new Vector3[width * height];

        uvs = new Vector2[width * height];

        //Generate the noise map
        noiseMap = PerlinNoiseGenerator.GenerateNoise(width, height, scale, seed);

        //Create new texture for the mesh
        meshTex = new Texture2D(width, height);

        Generate();
    }
    public static HeightMap GenerateHeightMap(float[,] heightMap, int width, int height, HeightMapSettings settings, Vector2 center)
    {
        float[,] values = PerlinNoiseGenerator.GenPerlinNoise(heightMap, width, height, settings, center);
        AnimationCurve heightCurve_threadsafe = new AnimationCurve(settings.heightCurve.keys);
        float          minVal = float.MaxValue;
        float          maxVal = float.MinValue;

        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {
                values[x, y] *= heightCurve_threadsafe.Evaluate(values[x, y]) * settings.heightMultiplier;

                if (values[x, y] > maxVal)
                {
                    maxVal = values[x, y];
                }
                else if (values[x, y] < minVal)
                {
                    minVal = values[x, y];
                }
            }
        }

        return(new HeightMap(values, minVal, maxVal));
    }
 void ThreadFunction()
 {
     Debug.Log("Thread running...");
     m_NoiseGenerator = new PerlinNoiseGenerator(2048, 2048);
     m_NoiseGenerator.GenerateHeightmap(m_octave, m_persistence);
     m_NoiseGenerator.ForceZeroBorder(8, 1.1f);
 }
예제 #6
0
        protected override void OnRequest(IWorld world, Rectangle range)
        {
            int val = PerlinNoiseGenerator.Random(3902, (range.Left * 1100 + range.Top * 2367) / Const.GRID) % 40;

            if (val < 5)
            {
                AddObject("Goomba", world, range.Location);
            }
            else if (val < 7)
            {
                AddObject("GreenKoopa", world, range.Location);
            }
            else if (val < 9)
            {
                AddObject("RedKoopa", world, range.Location);
            }
            else if (val < 11)
            {
                AddObject("Beetle", world, range.Location);
            }
            else if (val < 12)
            {
                AddObject("Thwomp", world, range.Location);
            }
        }
예제 #7
0
파일: Island.cs 프로젝트: gen-xu/MelloMario
        protected override void OnRequest(IWorld world, Rectangle range)
        {
            int m1 = PerlinNoiseGenerator.Random(3333, range.Left / Const.GRID) % 4 + 2;
            int m2 = PerlinNoiseGenerator.Random(3333, range.Left / Const.GRID) % 4 + 2;

            base.OnRequest(world, new Rectangle(range.X + m1 * Const.GRID, range.Y, range.Width - (m1 + m2) * Const.GRID, range.Height));
        }
예제 #8
0
파일: Scroll.cs 프로젝트: gen-xu/MelloMario
        protected override void OnRequest(IWorld world, Rectangle range)
        {
            // note: top / buttom are locked

            while (world.Boundary.Left > range.Left - Const.GRID)
            {
                Tuple <int, int> pair = PerlinNoiseGenerator.RandomSplit(23333, world.Boundary.Left / Const.GRID - 1, 32);

                Rectangle subRange = new Rectangle(
                    pair.Item1 * Const.GRID,
                    world.Boundary.Top,
                    world.Boundary.Left - pair.Item1 * Const.GRID,
                    world.Boundary.Height);
                RunChild(world, subRange, PerlinNoiseGenerator.Random(23334, pair.Item1));
                world.Extend(subRange.Width, 0, 0, 0);
            }

            while (world.Boundary.Right < range.Right + Const.GRID)
            {
                Tuple <int, int> pair = PerlinNoiseGenerator.RandomSplit(23333, world.Boundary.Right / Const.GRID, 16);

                Rectangle subRange = new Rectangle(
                    world.Boundary.Right,
                    world.Boundary.Top,
                    pair.Item2 * Const.GRID - world.Boundary.Right,
                    world.Boundary.Height);
                RunChild(world, subRange, PerlinNoiseGenerator.Random(23334, pair.Item1));
                world.Extend(0, subRange.Width, 0, 0);
            }
        }
예제 #9
0
        protected override void OnRequest(IWorld world, Rectangle range)
        {
            int val = PerlinNoiseGenerator.Random(3902, (range.Left * 1100 + range.Top * 2367) / Const.GRID) % 20;

            if (val < 1)
            {
                AddObject("Bush", world, range.Location);
            }
            else if (val < 2)
            {
                AddObject("LeftTriangle", world, range.Location);
            }
            else if (val < 3)
            {
                AddObject("RightTriangle", world, range.Location);
            }
            else if (val < 4)
            {
                AddObject("Arc", world, range.Location);
            }
            else if (val < 5)
            {
                AddObject("Rectangle", world, range.Location);
            }
        }
예제 #10
0
 public Perlin(IListener <IGameObject> scoreListener, IListener <ISoundable> soundListener) : base(scoreListener, soundListener)
 {
     perlinNoiseGenerator = new PerlinNoiseGenerator(5120);
     noiseConverter       = new NoiseConverter();
     noiseConverter.SetSize(40, 16);
     terrian = new Terrian(scoreListener, soundListener, noiseConverter);
     noiseConverter.NewData();
 }
예제 #11
0
    void Start()
    {
        manager = World.Active.GetOrCreateManager <EntityManager>();
        PerlinNoiseGenerator perlin = new PerlinNoiseGenerator();

        heightmap = perlin.GenerateHeightMap();
        ChunkGenerator(chunckBase);
    }
예제 #12
0
 public Color Sample(Vector3 pos) {
     Color res = new Color();
     res.r = PerlinNoiseGenerator.OctaveNoise(pos, channel1PerlinPeriod,perlinOctaves);
     res.g = WorleyNoiseGenerator.OctaveNoise(pos, channel2WorleyPeriod, 1);
     res.b = WorleyNoiseGenerator.OctaveNoise(pos, channel3WorleyPeriod, 1);
     res.a = WorleyNoiseGenerator.OctaveNoise(pos, channel4WorleyPeriod, 1);
     return res;
 }
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        if (GUILayout.Button("Generate"))
        {
            PerlinNoiseGenerator generator = (PerlinNoiseGenerator)target;
            generator.Generate();
        }
    }
예제 #14
0
        private static NoiseGenerator[] CreateOctaves(Random random, int octaves)
        {
            var array = new NoiseGenerator[octaves];

            for (var i = 0; i < octaves; i++)
            {
                array[i] = new PerlinNoiseGenerator(random);
            }

            return(array);
        }
예제 #15
0
        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            PerlinNoiseSettings[] settings = new PerlinNoiseSettings[this.layers.Items.Count];
            for (int i = 0; i < this.layers.Items.Count; i++)
            {
                settings[i] = PerlinNoiseSettings.Parse((string)this.layers.Items[i]);
            }

            this.start = DateTime.Now;
            this.full  = PerlinNoiseGenerator.GetImage(settings, (int)this.resolution.Value, (int)this.threads.Value, (int)this.seed.Value);
            this.end   = DateTime.Now;
        }
예제 #16
0
    /// <summary>
    /// 依据柏林噪声算法赋值方块高度
    /// </summary>
    private int GetPerlinY(Transform _blockTrans)
    {
        float xSample = (_blockTrans.localPosition.x + GetSeedX) / m_relief;
        float zSample = (_blockTrans.localPosition.z + GetSeedZ) / m_relief;
        //float noise = Mathf.PerlinNoise( xSample, zSample );
        float noise = (float)PerlinNoiseGenerator.PerlinNoise(xSample, zSample);
        float y     = GetMapHeight * noise;

        y = Mathf.Round(y);   //取整
        return((int)y);
        //_blockTrans.localPosition += Vector3.up * y;
    }
예제 #17
0
    void Start()
    {
        manager = World.Active.GetOrCreateManager <EntityManager>();

        PerlinNoiseGenerator perlin = new PerlinNoiseGenerator();

        heightmap = perlin.GenerateHeightMap();

        //创建一个碰撞池
        colPool = new ColliderPool(boxCollider, transform);

        ChunckGenerator(chunckBase);
    }
예제 #18
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            PerlinNoiseGenerator generator = (PerlinNoiseGenerator)target;

            if (GUILayout.Button("Randomise Seed"))
            {
                generator.RandomiseSeed();
            }

            if (GUILayout.Button("Save new Perlin Noise Generator"))
            {
                generator.CreateNewPerlinNoiseTexture();
            }
        }
        public IActionResult Index()
        {
            mapRepository.GetMap(TempData.Peek("SelectedMap").ToString(), User.Identity.Name);
            var map        = mapRepository.Map;
            var FloatArray = new float[map.Size, map.Size];

            FloatArray = PerlinNoiseGenerator.GenerateMap(map.Size, map.Seed);

            if (map.MapType == 1)
            {
                FloatArray = IslandMaskGenerator.ApplyIslandMask(map.Size, FloatArray);
            }

            var IntegerArray = new int[map.Size, map.Size];

            for (var y = 0; y < map.Size; y++)
            {
                for (var x = 0; x < map.Size; x++)
                {
                    IntegerArray[x, y] = (int)(FloatArray[x, y] * 256);
                }
            }

            var width      = map.Size;
            var height     = map.Size;
            var ColorArray = new Color[map.Size, map.Size];

            for (var y = 0; y < height; y++)
            {
                for (var x = 0; x < width; x++)
                {
                    var HeightValue = IntegerArray[x, y];
                    var color       = TileColorSelector.SelectTileColor(HeightValue, map.GroundType);
                    ColorArray[x, y] = color;
                }
            }

            var model = new WorldMapViewModel
            {
                MapName      = map.Name,
                Size         = map.Size,
                HeightValues = IntegerArray,
                TileSize     = 40,
                TileColors   = ColorArray
            };

            return(View(model));
        }
예제 #20
0
파일: Blocks.cs 프로젝트: gen-xu/MelloMario
        protected override void OnRequest(IWorld world, Rectangle range)
        {
            int val = PerlinNoiseGenerator.Random(3902, (range.Left * 1100 + range.Top * 2367) / Const.GRID) % 20;

            if (val < 1)
            {
                AddObject("Brick", world, range.Location);
            }
            else if (val < 2)
            {
                AddObject("Stair", world, range.Location);
            }
            else if (val < 3)
            {
                AddObject("Question", world, range.Location);
            }
        }
예제 #21
0
        static Unit CreateUnit(
            PlanetConfig cfg,
            Vector2Int localIdx,
            GeoRange rect,
            Unit parentUnit,
            int zoomLevel)
        {
            //var unit = new GameObject().AddComponent<Unit>();
            //unit.name = localIdx.ToString();
            //unit.transform.parent = parentGo;
            var unit = new Unit
            {
                Parent    = parentUnit,
                cfg       = cfg,
                ZoomLevel = zoomLevel
            };

            if (parentUnit == null)
            {
                unit.dataStart = localIdx;
            }
            else
            {
                unit.dataStart = parentUnit.dataStart * PlanetConfig.UnitSize + localIdx;
            }
            unit.LocalIndex = localIdx;
            if (zoomLevel == 0)
            {
                //unit.Surface = SurfaceArea.Load();
                if (unit.Surface == null)
                {
                    unit.Surface        = new SurfaceArea(rect);
                    unit.Surface.Points = PerlinNoiseGenerator.CreatePlanetSurfacePoints(cfg);
                    //unit.Surface.Save();
                }
            }
            else
            {
                unit.Surface = new SurfaceArea(rect);
            }

            return(unit);
        }
    public List <IntVector2> chunkList; // a list that stores the coordinates of every chunk

    void Awake()
    {
        noise         = new PerlinNoiseGenerator(UnityEngine.Random.Range(1000000, 10000000));
        chunkList     = new List <IntVector2>();
        numSideBlocks = noise.chunkSize / noise.blockSize;
        chunkGrid     = new int[numSideBlocks, numSideBlocks];

        minX = -noise.chunkSize / noise.blockSize / 2;
        maxX = noise.chunkSize / noise.blockSize / 2;
        minY = -noise.chunkSize / noise.blockSize / 4;
        maxY = noise.chunkSize / noise.blockSize / 4;
        minZ = -noise.chunkSize / noise.blockSize / 2;
        maxZ = noise.chunkSize / noise.blockSize / 2;

        spawnDistance   = noise.chunkSize * 2;
        despawnDistance = noise.chunkSize * 3;

        //CreateChunks();
    }
    private void InitializeMap()
    {
        SpriteRenderer sr = GetComponent <SpriteRenderer>();

        terrainMapNoiseSeed  = Random.Range(-99999, 99999);
        moistureMapNoiseSeed = Random.Range(-99999, 99999);

        terrainNoiseGenerator              = new PerlinNoiseGenerator(terrainMapNoiseSeed);
        moistureNoiseGenreator             = new PerlinNoiseGenerator(moistureMapNoiseSeed);
        moistureNoiseGenreator.octaves     = 10;
        moistureNoiseGenreator.lacunarity  = 1.2f;
        moistureNoiseGenreator.persistance = 0.3f;
        moistureNoiseGenreator.scale       = 75;

        float[,] terrainNoiseMap  = terrainNoiseGenerator.GenerateNoiseMap(true, mapSize.x, mapSize.y);
        float[,] moistureNoiseMap = moistureNoiseGenreator.GenerateNoiseMap(false, mapSize.x, mapSize.y);

        sr.sprite = GenerateIslandTerrain(terrainNoiseMap, moistureNoiseMap);
        //sr.sprite = GenerateSpriteFromNoiseMap(terrainNoiseMap);
    }
예제 #24
0
        public void GenerateNoiseTexture()
        {
            PerlinNoiseGenerator gen = new PerlinNoiseGenerator();

            gen.OctaveCount   = 7;
            gen.Persistence   = .55f;
            gen.Interpolation = InterpolationAlgorithms.CosineInterpolation;

            perlinNoise = gen.GeneratePerlinNoise(512, 512);

            CustomGradientColorFilter filter      = new CustomGradientColorFilter();
            Texture2DTransformer      transformer = new Texture2DTransformer(graphics.GraphicsDevice);

            filter.AddColorPoint(0.0f, 0.40f, Color.Blue);
            filter.AddColorPoint(0.4f, 0.50f, Color.Yellow);
            filter.AddColorPoint(0.50f, 0.70f, Color.Green);
            filter.AddColorPoint(0.70f, 0.90f, Color.SaddleBrown);
            filter.AddColorPoint(0.90f, 1.00f, Color.White);

            noiseTexture = transformer.Transform(filter.Filter(perlinNoise));
        }
예제 #25
0
        protected override void OnRequest(IWorld world, Rectangle range)
        {
            int baseH = range.Height / Const.GRID - 6 - PerlinNoiseGenerator.Random(12321, range.Left / Const.GRID) % 6;

            for (int j = range.Left; j < range.Right; j += Const.GRID)
            {
                int mat = PerlinNoiseGenerator.RandomProp(1001, j / Const.GRID, 20) % 20;

                int height = Math.Min(
                    baseH,
                    Math.Min(3 + (j - range.Left) / Const.GRID, 3 + (range.Right - Const.GRID - j) / Const.GRID));

                for (int i = 1; i <= height; ++i)
                {
                    if (
                        mat < 1 ||
                        mat < 2 && PerlinNoiseGenerator.Random(1002, j / Const.GRID) % 2 == 0 ||
                        mat < 4 && i > 3)
                    {
                        AddObject("Stair", world, new Point(j, range.Bottom - i * Const.GRID));
                    }
                    else
                    {
                        AddObject("Stair", world, new Point(j, range.Bottom - i * Const.GRID));
                    }
                }

                RunChild2(world, new Rectangle(j, range.Bottom - (height + 1) * Const.GRID, Const.GRID, Const.GRID), PerlinNoiseGenerator.Random(23335, j / Const.GRID));
            }

            for (int j = range.Left, k; j < range.Right; j = k)
            {
                Tuple <int, int> pair = PerlinNoiseGenerator.RandomSplit(34567, j / Const.GRID, 8);
                k = Math.Min(pair.Item2 * Const.GRID, range.Right);

                Rectangle subRange = new Rectangle(j, world.Boundary.Top, k - j, world.Boundary.Height - (3 + baseH) * Const.GRID);
                RunChild(world, subRange, PerlinNoiseGenerator.Random(23335, pair.Item1));
            }
        }
예제 #26
0
        void Start()
        {
            // Get Entity Manager.
            manager = World.DefaultGameObjectInjectionWorld.EntityManager;

            // Create block archetype.
            BlockArchetype = manager.CreateArchetype(
                typeof(Translation),
                typeof(LocalToWorld)
                );

            // Convert prefab to entity.
            var settings = GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, null);

            prefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(BlockPrefab, settings);

            // Generate height map from PerlinNoiseGenerator.
            noiseGenerator = GetComponent <PerlinNoiseGenerator>();
            Minecraft.GameSettings.Heightmap = noiseGenerator.GenerateHeightMap();

            // Generate the world
            ChunkGenerator(ChunkBase);
        }
예제 #27
0
    public void GenerateMap()
    {
        // Generate the noise map
        float[,] heightMap = PerlinNoiseGenerator.GenerateNoiseMap(mapWidth, mapHeight, noiseScale, octaves, persistance, lacunarity, seed, offset);


        // Draw the terrain
        MapDisplay display = FindObjectOfType <MapDisplay>();

        if (drawMode == DrawMode.ColorMap)
        {
            Color[] colorMap = CreateColorMap(heightMap);
            display.DrawColorMap(colorMap, mapWidth, mapHeight);
        }
        else if (drawMode == DrawMode.NoiseMap)
        {
            display.DrawNoiseMap(heightMap);
        }
        else if (drawMode == DrawMode.Mesh)
        {
            Color[] colorMap = CreateColorMap(heightMap);
            display.DrawMesh(heightMap, colorMap, mapWidth, mapHeight);
        }
    }
예제 #28
0
 public float Noise(Vector3 pos)
 {
     return(channel1WorleyPercent * WorleyNoiseGenerator.OctaveNoise(pos, channel1WorleyPeriod, worleyOcataves)
            + (1 - channel1WorleyPercent) * PerlinNoiseGenerator.OctaveNoise(pos, channel1PerlinPeriod, perlinOctaves));
 }
예제 #29
0
    private void Generate()
    {
        #region HeightMap
        if (heightMap)
        {
            MeshFilter _meshFilter = GetComponent <MeshFilter>();
            Mesh       _mesh       = new Mesh();
            _meshFilter.mesh = _mesh;

            float xRatio = _tex.width / rows;
            float yRatio = _tex.height / columns;

            Color[] _colours = new Color[(rows + 1) * (columns + 1)];

            int x = 0, z = 0;
            for (int i = 0; i < _vertices.Length; ++i)
            {
                Color pix  = _tex.GetPixel((int)(x * xRatio), (int)(z * yRatio));
                float zVal = minTerrainHeight + maxTerrainHeight * pix.grayscale;

                _vertices[i].Set(x, zVal, z);
                ++x;
                if (x % (columns + 1) == 0)
                {
                    x = 0;
                    ++z;
                }

                if (zVal > (maxTerrainHeight / 2f))
                {
                    _colours[i].a = 1f;
                    _colours[i].r = 1f;
                    _colours[i].g = 1f;
                    _colours[i].b = 1f;
                }
                else if (zVal > (maxTerrainHeight / 3f))
                {
                    _colours[i].a = 1f;
                    _colours[i].r = 0f;
                    _colours[i].g = 1f;
                    _colours[i].b = 0f;
                }
                else
                {
                    _colours[i].a = 1f;
                    _colours[i].r = 0f;
                    _colours[i].g = 0f;
                    _colours[i].b = 1f;
                }
            }

            int   numIndicies = columns * rows * 6;
            int[] triangles   = new int[numIndicies];
            for (int ti = 0, vi = 0; vi < (columns * (rows + 1)); ++vi, ti += 6)
            {
                triangles[ti]     = vi;
                triangles[ti + 3] = triangles[ti + 2] = vi + 1;
                triangles[ti + 4] = triangles[ti + 1] = vi + columns + 1;
                triangles[ti + 5] = vi + columns + 2;

                if (vi != 0 && (vi + 2) % (columns + 1) == 0)
                {
                    ++vi;
                }
            }

            _mesh.vertices  = _vertices;
            _mesh.triangles = triangles;
            _mesh.colors    = _colours;
            _mesh.RecalculateNormals();
        }
        #endregion
        else
        {
            MeshFilter _meshFilter = GetComponent <MeshFilter>();
            Mesh       _mesh       = new Mesh();
            _meshFilter.mesh = _mesh;

            float[,] noiseMap = PerlinNoiseGenerator.GenerateNoise(rows, columns, 25.2f, 250);

            //int x = 0, z = 0;

            int vertexIndex = 0;
            for (int y = 0; y < columns; ++y)
            {
                for (int x = 0; x < rows; ++x)
                {
                    _vertices[vertexIndex].Set(x, noiseMap[y, x], y);

                    //if (x == 20)
                    //{
                    //    x = 0;
                    //    ++z;
                    //}
                    //++x;
                    ++vertexIndex;
                }
            }

            int   numIndicies = columns * rows * 6;
            int[] triangles   = new int[numIndicies];
            for (int ti = 0, vi = 0; vi < (columns * (rows + 1)); ++vi, ti += 6)
            {
                triangles[ti]     = vi;
                triangles[ti + 3] = triangles[ti + 2] = vi + 1;
                triangles[ti + 4] = triangles[ti + 1] = vi + columns + 1;
                triangles[ti + 5] = vi + columns + 2;

                if (vi != 0 && (vi + 2) % (columns + 1) == 0)
                {
                    ++vi;
                }
            }

            _mesh.vertices  = _vertices;
            _mesh.triangles = triangles;
            //_mesh.colors = _colours;
            _mesh.RecalculateNormals();
        }
    }
예제 #30
0
 /// <summary>
 /// Generates an array filled with Perlin Noise.
 /// </summary>
 public float[,] GenerateNoiseMap(int MapWidth, int MapHeight, int Seed,
                                  int Octaves, float NoiseScale, float Persistance, float Lacunarity, Vector2 Offset, Vector2 Offset_Random)
 {
     return(PerlinNoiseGenerator.GenerationNoiseMap(
                MapWidth, MapHeight, Seed, Octaves, NoiseScale, Persistance, Lacunarity, Offset, Offset_Random));
 }