pbrt/src/core/pbrt.rs
2025-10-29 17:29:36 +00:00

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)
}