Example #1
0
double* Oscillator::fillWhiteNoiseBuffer(int bufferLength)
{
    _currentPhase = 0.0;
    _bufferLength = bufferLength;
    if(_buffer != nullptr)
        delete _buffer;
    _buffer = new double[_bufferLength];
    for(int i = 0; i < _bufferLength; ++i)
    {
        _buffer[i] = generateWhiteNoise();
    }
    return _buffer;
}
void NoiseGenerator::generatePerlinNoise ( int seed, int width, int height ) {
	this->width = width;
	this->height = height;
	srand(seed);
	
	generatedNoise = getArray();
	
	for (int x = 0; x < width; x++) {
		for (int y = 0; y < height; y++) {
			generatedNoise[x][y] = 0;
		}
	}
	
	int numOctaves = 8;
	
	float*** octaves = new float**[numOctaves];
	for (int i = 0; i < numOctaves; i++) {
		octaves[i] = new float*[width];
		
		for (int j = 0; j < width; j++) {
			octaves[i][j] = new float[height];
		}
	}
	
	float** baseNoise = generateWhiteNoise();
	
	for (int i = 0; i < numOctaves; i++) {
		octaves[i] = generateSmoothNoise(baseNoise, i);
	}
	
	float amplitude = 1.0f;
	float totalAmplitude = 0.0f;
	float persistence = 0.5f;
	
	for (int i = numOctaves - 1; i >= 0; i--) {
		amplitude *= persistence;
		totalAmplitude += amplitude;
		
		for (int x = 0; x < width; x++) {
			for (int y = 0; y < height; y++) {
				generatedNoise[x][y] += octaves[i][x][y] * amplitude;
			}
		}
	}
	
	for (int x = 0; x < width; x++) {
		for (int y = 0; y < height; y++) {
			generatedNoise[x][y] /= totalAmplitude;
		}
	}
}