void TerrainProceduralDialog::makePertrub(float frequency, float distance) { setWorking(true); PerlinNoise perlin; perlin.setSeed(1); perlin.initGradients(); int u, v; float * temp = new float[m_mapWidth*m_mapDepth]; for (int i = 0; i < m_mapWidth; ++i) for (int j = 0; j < m_mapDepth; ++j) { u = i + (int)(perlin.noise(frequency * i / (float)m_mapWidth, frequency * j / (float)m_mapDepth, 0) * distance); v = j + (int)(perlin.noise(frequency * i / (float)m_mapWidth, frequency * j / (float)m_mapDepth, 1) * distance); if (u < 0) u = 0; if (u >= m_mapWidth) u = m_mapWidth - 1; if (v < 0) v = 0; if (v >= m_mapDepth) v = m_mapDepth - 1; temp[i*m_mapWidth+j] = data[u*m_mapWidth+v]; } for(int i=0;i<m_mapWidth*m_mapDepth;i++) data[i]=temp[i]; delete temp; updateImage(); setWorking(false); }
void TerrainProceduralDialog::makePerlinNoise(float seed, float frequency) { setWorking(true); PerlinNoise perlin; perlin.setSeed(seed); perlin.initGradients(); for(int i=0; i<m_mapWidth;i++) for(int j=0; j<m_mapDepth;j++) { float value=perlin.noise(frequency * i / (float)m_mapWidth, frequency * j / (float)m_mapDepth, 0); data[i*m_mapWidth+j]=value; } updateImage(); setWorking(false); }