Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}