/*
 * PerlinNoise.cpp
 *
 *  Created on: Jul 11, 2008
 *      Author: pete
 */

#include "PerlinNoise.hpp"
#include <iostream>
#include <stdlib.h>

PerlinNoise::PerlinNoise()
{
	for (int x = 0; x < 256;x++)
		for (int y = 0; y < 256;y++)
			noise_lq[x][y] = noise(x , y);

	for (int x = 0; x < 32;x++)
		for (int y = 0; y < 32;y++)
			noise_lq_lite[x][y] = noise(4*x,16*y);

	for (int x = 0; x < 256;x++)
		for (int y = 0; y < 256;y++)
			noise_mq[x][y] = InterpolatedNoise((float)x/(float)2.0,(float)y/(float)2.0);

	for (int x = 0; x < 256;x++)
		for (int y = 0; y < 256;y++)
			noise_hq[x][y] = InterpolatedNoise((float)x/(float)3.0,(float)y/(float)3.0);

	for (int x = 0; x < 32;x++)
		for (int y = 0; y < 32;y++)
			for (int z = 0; z < 32;z++)
				noise_lq_vol[x][y][z] = noise(x,y,z);

	for (int x = 0; x < 32;x++)
		for (int y = 0; y < 32;y++)
			for (int z = 0; z < 32;z++)
				noise_hq_vol[x][y][z] = noise(x,y,z);//perlin_noise_3d(x,y,z,6121,7,seed3,0.5,64);

	int seed = rand()%1000;

	int size = 512;
	int octaves = sqrt((double)size);

		for (int x = 0; x < size;x++)
			for (int y = 0; y < size;y++)
				noise_perlin[x][y] = perlin_noise_2d(x,y,6321,octaves,seed,0.5,size/4);
}

PerlinNoise::~PerlinNoise()
{
	// TODO Auto-generated destructor stub
}
