/// <summary> /// Construct and initialise a fractal generator /// </summary> /// <param name="frequency">The frequency of the first octave</param> /// <param name="lacunarity">The frequency multiplier between successive octaves. Experiment between 1.5 - 3.5.</param> /// <param name="octaves">The amount of detail in the fractal - more octaves mean more detail and longer calc time.</param> /// <param name="persistance">The roughness of the fractal noise. Controls how quickly amplitudes diminish for successive octaves. 0..1.</param> /// <param name="seed">Seed - different seeds generate replicable different fractals</param> /// <param name="type">The type of generator being used</param> public FractalGenerator(float frequency, float lacunarity, int octaves, float persistance, float seed, Fractals type) { m_frequency = frequency; m_lacunarity = lacunarity; m_octaves = octaves; m_persistence = persistance; m_seed = seed; switch (type) { case Fractals.Perlin: m_noiseCalculator = GetValue_Perlin; break; case Fractals.Billow: m_noiseCalculator = GetValue_Billow; break; case Fractals.RidgeMulti: CalcSpectralWeights(); m_noiseCalculator = GetValue_RidgedMulti; break; default: m_noiseCalculator = GetValue_Perlin; break; } }
/// <summary> /// Set some reasonable defaults for the fractal type /// </summary> public void SetDefaults() { switch (m_fractalType) { case Fractals.Perlin: { m_frequency = 1f; m_lacunarity = 2f; m_octaves = 6; m_persistence = 0.5f; m_seed = 0; m_noiseCalculator = GetValue_Perlin; break; } case Fractals.Billow: { m_frequency = 1f; m_lacunarity = 2f; m_octaves = 6; m_persistence = 0.5f; m_seed = 0; m_noiseCalculator = GetValue_Billow; break; } case Fractals.RidgeMulti: { m_frequency = 1f; m_lacunarity = 2f; m_octaves = 6; m_seed = 0; CalcSpectralWeights(); m_noiseCalculator = GetValue_RidgedMulti; break; } } }