25 lines
683 B
Rust
25 lines
683 B
Rust
use crate::Float;
|
|
use crate::core::geometry::{Point3f, Vector3f};
|
|
use crate::core::texture::{TextureEvalContext, TextureMapping3D};
|
|
use crate::utils::noise::fbm;
|
|
|
|
#[repr(C)]
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub struct WindyTexture {
|
|
pub mapping: TextureMapping3D,
|
|
}
|
|
|
|
impl WindyTexture {
|
|
pub fn evaluate(&self, ctx: &TextureEvalContext) -> Float {
|
|
let c = self.mapping.map(ctx);
|
|
let wind_strength = fbm(
|
|
Point3f::from(0.1 * Vector3f::from(c.p)),
|
|
0.1 * c.dpdx,
|
|
0.1 * c.dpdy,
|
|
0.5,
|
|
3,
|
|
);
|
|
let wave_height = fbm(c.p, c.dpdx, c.dpdy, 0.5, 6);
|
|
wind_strength.abs() * wave_height
|
|
}
|
|
}
|