public BlueNoiseGenerator(float range)
    {
        int intRange = (int)range;

        allSamplesCount = intRange * intRange;
        allSamples      = Enumerable.Range(0, allSamplesCount)
                          .Select(x => new Vector2(x / intRange, x % intRange)).ToList();
        Range = range;
        WhiteNoiseGenerator = new WhiteNoiseGenerator(range);

        var first = WhiteNoiseGenerator.Next();

        samples.Add(first);

        quadTree = new QuadTree(first);
    }
Beispiel #2
0
    private void UpdateTexture()
    {
        if (texture == null)
        {
            CreateTexture();
        }

        // Clear
        var pixels = texture.GetPixels32();

        for (var i = 0; i < pixels.Length; i++)
        {
            pixels[i] = Color.black;
        }

        texture.SetPixels32(pixels);

        // Sample
        material.mainTexture = texture;

        INoiseGenerator noiseGenerator;

        switch (generatorType)
        {
        case GeneratorType.WhiteNoise:
            noiseGenerator = new WhiteNoiseGenerator(TextureSize);
            break;

        case GeneratorType.HaltonNoise:
            noiseGenerator = new HaltonNoiseGenerator(TextureSize);
            break;

        case GeneratorType.BlueNoise:
            noiseGenerator = new BlueNoiseGenerator(TextureSize);
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }
        for (var i = 0; i < sampleCount; i++)
        {
            var point = noiseGenerator.Next();
            texture.SetPixel((int)point.x, (int)point.y, Color.white);
        }

        texture.Apply();
    }
Beispiel #3
0
        public static float[] CreateTable(int size, WaveformEnum type)
        {
            Generator generator;

            if (type == WaveformEnum.Sine)
            {
                generator = new SineGenerator(new GeneratorDescriptor());
            }
            else if (type == WaveformEnum.Square)
            {
                generator = new SquareGenerator(new GeneratorDescriptor());
            }
            else if (type == WaveformEnum.Triangle)
            {
                generator = new TriangleGenerator(new GeneratorDescriptor());
            }
            else if (type == WaveformEnum.Saw)
            {
                generator = new SawGenerator(new GeneratorDescriptor());
            }
            else if (type == WaveformEnum.WhiteNoise)
            {
                generator = new WhiteNoiseGenerator(new GeneratorDescriptor());
            }
            else
            {
                return(null);
            }
            float[] table = new float[size];
            double  phase, increment;

            phase     = generator.StartPhase;
            increment = generator.Period / size;
            for (int x = 0; x < table.Length; x++)
            {
                table[x] = generator.GetValue(phase);
                phase   += increment;
            }
            return(table);
        }