25 lines
488 B
Rust
25 lines
488 B
Rust
|
|
pub type Float = f32;
|
|
|
|
pub const MACHINE_EPSILON: Float = std::f32::EPSILON * 0.5;
|
|
pub const SHADOW_EPSILON: Float = 0.0001;
|
|
|
|
#[inline]
|
|
pub fn lerp<T>(x: T, a: f64, b: f64) -> f64 {
|
|
(T::onw() - x) * a + x * b
|
|
}
|
|
|
|
pub fn linear_pdf(x: f64, a: f64, b: f64) -> f64 {
|
|
if x < 0.0 || x > 1.0 {
|
|
return 0.0;
|
|
}
|
|
2.0 * lerp(x, a, b) / (a + b)
|
|
}
|
|
|
|
pub fn sample_linear(u: f64, a: f64, b: f64) -> f64 {
|
|
if u == 0.0 && a == 0.0 {
|
|
return 0.0;
|
|
}
|
|
|
|
u * (a + b)
|
|
}
|