use rand; use perlin::Perlin; use texture::Texture; use vec3::Vec3; pub struct NoiseTexture { scale: f32, perlin: Perlin, } impl NoiseTexture { pub fn new(rng: &mut R) -> NoiseTexture where R: rand::Rng, { NoiseTexture::with_scale(rng, 1.) } pub fn with_scale(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)) } }