40 lines
979 B
Rust
40 lines
979 B
Rust
use rand;
|
|
|
|
use perlin::Perlin;
|
|
use texture::Texture;
|
|
use vec3::Vec3;
|
|
|
|
pub struct NoiseTexture {
|
|
scale: f32,
|
|
perlin: Perlin,
|
|
}
|
|
|
|
impl NoiseTexture {
|
|
pub fn new<R>(rng: &mut R) -> NoiseTexture
|
|
where
|
|
R: rand::Rng,
|
|
{
|
|
NoiseTexture::with_scale(rng, 1.)
|
|
}
|
|
pub fn with_scale<R>(rng: &mut R, scale: f32) -> NoiseTexture
|
|
where
|
|
R: rand::Rng,
|
|
{
|
|
NoiseTexture {
|
|
scale,
|
|
perlin: Perlin::new(rng),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Texture for NoiseTexture {
|
|
fn value(&self, _u: f32, _v: f32, p: Vec3) -> Vec3 {
|
|
Vec3::new(1., 1., 1.) * 0.5 * (1. + self.perlin.noise(self.scale * p))
|
|
|
|
//Vec3::new(1., 1., 1.) * turb(self.scale * p, 7)
|
|
//Vec3::new(1., 1., 1.) * 0.5 * (1. + turb(self.scale * p, 7))
|
|
//Vec3::new(1., 1., 1.) * 0.5 * (1. + (self.scale * p.z + 10. * self.perlin.turb(p, 7)).sin())
|
|
//Vec3::new(1., 1., 1.) * 0.5 * (1. + GENERATOR.noise(self.scale * p))
|
|
}
|
|
}
|