extern crate noise;
use noise::{utils::*, *};
mod utils;
fn main() {
let base_wood = Cylinders::new().set_frequency(16.0);
let wood_grain_noise = BasicMulti::<Perlin>::new(0)
.set_frequency(48.0)
.set_persistence(0.5)
.set_lacunarity(2.20703125)
.set_octaves(3);
let scaled_base_wood_grain = ScalePoint::new(wood_grain_noise).set_z_scale(0.25);
let wood_grain = ScaleBias::new(scaled_base_wood_grain)
.set_scale(0.25)
.set_bias(0.125);
let combined_wood = Add::new(base_wood, wood_grain);
let perturbed_wood = Turbulence::<_, Perlin>::new(combined_wood)
.set_seed(1)
.set_frequency(4.0)
.set_power(1.0 / 256.0)
.set_roughness(4);
let translated_wood = TranslatePoint::new(perturbed_wood).set_y_translation(1.48);
let rotated_wood = RotatePoint::new(translated_wood).set_angles(84.0, 0.0, 0.0, 0.0);
let final_wood = Turbulence::<_, Perlin>::new(rotated_wood)
.set_seed(2)
.set_frequency(2.0)
.set_power(1.0 / 64.0)
.set_roughness(4);
let planar_texture = PlaneMapBuilder::new(final_wood)
.set_size(1024, 1024)
.build();
let wood_gradient = ColorGradient::new()
.clear_gradient()
.add_gradient_point(-1.000, [189, 94, 4, 255])
.add_gradient_point(0.500, [144, 48, 6, 255])
.add_gradient_point(1.0, [60, 10, 8, 255]);
let mut renderer = ImageRenderer::new().set_gradient(wood_gradient);
utils::write_image_to_file(&renderer.render(&planar_texture), "texture_wood_planar.png");
}