예제 #1
0
        public PerlinNoise2D(uint m, uint n, byte count = 4, float maxAmpl = 1)
        {
            Debug.Assert(m >= count);

            uint newM = _DownTo2Based(m);
            uint newN = _DownTo2Based(n);

            _scaleX = (float)newM / (float)m;
            _scaleY = (float)newN / (float)n;

            _octaves = new CoherentNoise2D[count];
            uint freqX = newM / count;
            uint freqY = newN / count;

            for (uint i = 0; i < count; i++)
            {
                m           = freqX * (i + 1);
                n           = freqY * (i + 1);
                _octaves[i] = new CoherentNoise2D(m, n);
            }

            _amplitude = maxAmpl;
        }
예제 #2
0
        /// <summary>
        /// 长宽最好为2^n+1
        /// <param name="minFreq">x方向最小倍频</param>
        /// </summary>
        public PerlinNoise2D(uint m, uint n, uint minFreq, float maxAmpl = 1)
        {
            // 缩放到标准2^n
            minFreq = _DownTo2Based(minFreq);
            uint newM = _DownTo2Based(m);
            uint newN = _DownTo2Based(n);

            _scaleX = (float)newM / (float)m;
            _scaleY = (float)newN / (float)n;

            _octaves = new CoherentNoise2D[newM / minFreq];
            uint freqX = minFreq;
            uint freqY = minFreq * newN / newM;

            // 不同频率的相关噪声
            for (uint i = 0; i < newM / minFreq; i++)
            {
                m           = freqX * (i + 1);
                n           = freqY * (i + 1);
                _octaves[i] = new CoherentNoise2D(m, n);
            }

            _amplitude = maxAmpl;
        }
예제 #3
0
        public PerlinNoise2D(uint m, uint n, byte count = 4, float maxAmpl = 1)
        {
            Debug.Assert(m >= count);

            uint newM = _DownTo2Based(m);
            uint newN = _DownTo2Based(n);
            _scaleX = (float)newM / (float)m;
            _scaleY = (float)newN / (float)n;

            _octaves = new CoherentNoise2D[count];
            uint freqX = newM / count;
            uint freqY = newN / count;
            for (uint i = 0; i < count; i++)
            {
                m = freqX * (i + 1);
                n = freqY * (i + 1);
                _octaves[i] = new CoherentNoise2D(m, n);
            }

            _amplitude = maxAmpl;
        }
예제 #4
0
        /// <summary>
        /// �������Ϊ2^n+1
        /// <param name="minFreq">x������С��Ƶ</param>
        /// </summary>
        public PerlinNoise2D(uint m, uint n, uint minFreq, float maxAmpl = 1)
        {
            // ���ŵ���׼2^n
            minFreq = _DownTo2Based(minFreq);
            uint newM = _DownTo2Based(m);
            uint newN = _DownTo2Based(n);
            _scaleX = (float)newM / (float)m;
            _scaleY = (float)newN / (float)n;

            _octaves = new CoherentNoise2D[newM / minFreq];
            uint freqX = minFreq;
            uint freqY = minFreq * newN / newM;
            // ��ͬƵ�ʵ��������
            for (uint i = 0; i < newM / minFreq; i++)
            {
                m = freqX * (i + 1);
                n = freqY * (i + 1);
                _octaves[i] = new CoherentNoise2D(m, n);
            }

            _amplitude = maxAmpl;
        }