private void PerlinNoiseGenration(Vector3 position, VisFrame[,,] frames, WorldTile[] neighbours, GraphicsDevice device, SpriteBatch sp) { //PerlinNoise.CreateStaticMap(WorldTile.WORLD_TILE_WIDTH, device); var test = PerlinNoise.GeneratePerlinNoiseGPU(new Vector3(position.X / 1000f, position.Y, position.Z / 1000f), device, sp); var grid = new Color[test.Width * test.Height]; test.GetData(grid); for (var x = 0; x < frames.GetLength(0); x++) { for (var z = 0; z < frames.GetLength(2); z++) { var highest = grid[x * z].R * .5 < _minHeight ? _minHeight : grid[x * z].R * .5; if (highest > _maxHeight) { highest = _maxHeight; } var currentIndex = 0; var counter = 0; for (var y = 0; y < highest; y++) { frames[x, y, z] = new VisFrame(FrameManager.Frames[_columnData[currentIndex].Frame]) { Visible = true }; counter++; if (_columnData[currentIndex].Height != 0) { if (counter >= _columnData[currentIndex].Height) { counter = 0; currentIndex++; } } else { if (highest - UpperFramesHeightTogether - 1 <= y) { counter = 0; currentIndex++; } } } } } FillWithAir(frames); //ApplyVis(frames,neighbours); }