示例#1
0
        public override double this[double x, double y, double z] {
            get {
                double val = 0.0;
                double signal = 0.0;
                double persistance = 1.0;
                double nx, ny, nz;
                int    seed;

                x *= Frequency;
                y *= Frequency;
                z *= Frequency;

                for (int octave = 0; octave < Octaves; ++octave)
                {
                    nx = Noise.MakeIntRange(x);
                    ny = Noise.MakeIntRange(y);
                    nz = Noise.MakeIntRange(z);

                    seed   = (int)((Seed + octave) & 0xffffffff);
                    signal = Noise.CoherentGradientNoise3D(nx, ny, nz, seed, Quality);
                    val   += signal * persistance;

                    x           *= Lacunarity;
                    y           *= Lacunarity;
                    z           *= Lacunarity;
                    persistance *= Persistance;
                }

                return(val);
            }
        }
示例#2
0
        public override double this[double x, double y, double z] {
            get {
                x *= Frequency;
                y *= Frequency;
                z *= Frequency;

                double signal = 0.0;
                double val    = 0.0;
                double weight = 1.0;

                double offset = 1.0;
                double gain   = 2.0;

                double[] weights = SpectralWeights;

                for (int octave = 0; octave < Octaves; ++octave)
                {
                    double nx = Noise.MakeIntRange(x);
                    double ny = Noise.MakeIntRange(y);
                    double nz = Noise.MakeIntRange(z);

                    int seed = (Seed + octave) & 0x7fffffff;
                    signal = Noise.CoherentGradientNoise3D(nx, ny, nz, seed, Quality);

                    signal  = System.Math.Abs(signal);
                    signal  = offset - signal;
                    signal *= signal;
                    signal *= weight;

                    weight = signal * gain;
                    if (weight > 1.0)
                    {
                        weight = 1.0;
                    }
                    if (weight < 0.0)
                    {
                        weight = 0.0;
                    }

                    val += (signal * weights[octave]);

                    x *= Lacunarity;
                    y *= Lacunarity;
                    z *= Lacunarity;
                }

                return((val * 1.25) - 1.0);
            }
        }