mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-21 11:43:27 +00:00
90 lines
1.3 KiB
Java
90 lines
1.3 KiB
Java
package com.volmit.iris.noise;
|
|
|
|
import com.volmit.iris.util.RNG;
|
|
|
|
public class PerlinNoise implements NoiseGenerator, OctaveNoise
|
|
{
|
|
private final FastNoiseDouble n;
|
|
private int octaves;
|
|
|
|
public PerlinNoise(long seed)
|
|
{
|
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
|
octaves = 1;
|
|
}
|
|
|
|
public double f(double v)
|
|
{
|
|
return (v / 2D) + 0.5D;
|
|
}
|
|
|
|
@Override
|
|
public double noise(double x)
|
|
{
|
|
if(octaves <= 1)
|
|
{
|
|
return f(n.GetPerlin(x, 0));
|
|
}
|
|
|
|
double f = 1;
|
|
double m = 0;
|
|
double v = 0;
|
|
|
|
for(int i = 0; i < octaves; i++)
|
|
{
|
|
v += n.GetPerlin((x * (f == 1 ? f++ : (f *= 2))), 0) * f;
|
|
m += f;
|
|
}
|
|
|
|
return f(v / m);
|
|
}
|
|
|
|
@Override
|
|
public double noise(double x, double z)
|
|
{
|
|
if(octaves <= 1)
|
|
{
|
|
return f(n.GetPerlin(x, z));
|
|
}
|
|
double f = 1;
|
|
double m = 0;
|
|
double v = 0;
|
|
|
|
for(int i = 0; i < octaves; i++)
|
|
{
|
|
f = f == 1 ? f + 1 : f * 2;
|
|
v += n.GetPerlin((x * f), (z * f)) * f;
|
|
m += f;
|
|
}
|
|
|
|
return f(v / m);
|
|
}
|
|
|
|
@Override
|
|
public double noise(double x, double y, double z)
|
|
{
|
|
if(octaves <= 1)
|
|
{
|
|
return f(n.GetPerlin(x, y, z));
|
|
}
|
|
double f = 1;
|
|
double m = 0;
|
|
double v = 0;
|
|
|
|
for(int i = 0; i < octaves; i++)
|
|
{
|
|
f = f == 1 ? f + 1 : f * 2;
|
|
v += n.GetPerlin((x * f), (y * f), (z * f)) * f;
|
|
m += f;
|
|
}
|
|
|
|
return f(v / m);
|
|
}
|
|
|
|
@Override
|
|
public void setOctaves(int o)
|
|
{
|
|
octaves = o;
|
|
}
|
|
}
|