NoiseTest.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Numerics;
  5. using System.Reflection;
  6. using System.Runtime.CompilerServices;
  7. using System.Text;
  8. using MineCase.Algorithm.Noise;
  9. using SixLabors.ImageSharp;
  10. using Xunit;
  11. namespace MineCase.UnitTest
  12. {
  13. public class NoiseTest
  14. {
  15. public readonly string RootDir;
  16. public NoiseTest()
  17. {
  18. RootDir = SetRootDir();
  19. }
  20. private static string SetRootDir([CallerFilePath]string fileName = null) =>
  21. Path.Combine(Path.GetDirectoryName(fileName), "bin");
  22. [Fact]
  23. public void TestPerlinNoise3D()
  24. {
  25. const int xExtent = 100;
  26. const int yExtent = 100;
  27. using (var file = File.OpenWrite(Path.Combine(RootDir, "PerlinNoise3D.bmp")))
  28. using (var image = new Image<SixLabors.ImageSharp.PixelFormats.Rgb24>(xExtent, yExtent))
  29. {
  30. var noise = new PerlinNoise(100);
  31. var noiseValue = new float[xExtent, yExtent, 1];
  32. noise.Noise(noiseValue, Vector3.Zero, new Vector3(0.1f, 0.1f, 0));
  33. for (int x = 0; x < xExtent; x++)
  34. {
  35. for (int y = 0; y < yExtent; y++)
  36. {
  37. var color = (byte)(noiseValue[x, y, 0] * 255);
  38. image[x, y] = new SixLabors.ImageSharp.PixelFormats.Rgb24(color, color, color);
  39. }
  40. }
  41. image.SaveAsBmp(file);
  42. }
  43. }
  44. [Fact]
  45. public void TestOctavedPerlinNoise3D()
  46. {
  47. const int xExtent = 100;
  48. const int yExtent = 100;
  49. using (var file = File.OpenWrite(Path.Combine(RootDir, "OctavedPerlinNoise3D.bmp")))
  50. using (var image = new Image<SixLabors.ImageSharp.PixelFormats.Rgb24>(xExtent, yExtent))
  51. {
  52. var noise = new OctavedNoise<PerlinNoise>(new PerlinNoise(100), 8, 0.25f);
  53. var noiseValue = new float[xExtent, yExtent, 1];
  54. noise.Noise(noiseValue, new Vector3(-10, 10, -10), new Vector3(0.1f, 0.1f, 0));
  55. for (int x = 0; x < xExtent; x++)
  56. {
  57. for (int y = 0; y < yExtent; y++)
  58. {
  59. var color = (byte)(noiseValue[x, y, 0] * 255);
  60. image[x, y] = new SixLabors.ImageSharp.PixelFormats.Rgb24(color, color, color);
  61. }
  62. }
  63. image.SaveAsBmp(file);
  64. }
  65. }
  66. [Fact]
  67. public void TestPerlinNoise3DPerformance()
  68. {
  69. if (!Vector.IsHardwareAccelerated)
  70. throw new NotSupportedException();
  71. var noise = new PerlinNoise(100);
  72. for (int i = 0; i < 100_0000; i++)
  73. {
  74. noise.Noise(i, i, i);
  75. }
  76. }
  77. [Fact]
  78. public void TestPerlinNoise3DPerformanceArray()
  79. {
  80. if (!Vector.IsHardwareAccelerated)
  81. throw new NotSupportedException();
  82. var noiseValue = new float[100, 100, 10];
  83. var noise = new PerlinNoise(100);
  84. for (int i = 0; i < 100; i++)
  85. {
  86. noise.Noise(noiseValue, new Vector3(i, i, i), new Vector3(0.1f, 0.1f, 0.1f));
  87. }
  88. }
  89. }
  90. }