rust_pathtracer/
math.rs

1use crate::prelude::*;
2
3#[inline(always)]
4pub fn cross(a: &F3, b: &F3) -> F3 {
5    a.cross(b)
6}
7
8#[inline(always)]
9pub fn dot(a: &F3, b: &F3) -> F {
10    a.dot(b)
11}
12
13#[inline(always)]
14pub fn normalize(a: & F3) -> F3 {
15    a.normalize()
16}
17
18#[inline(always)]
19pub fn floor(a: & F3) -> F3 {
20    a.floor()
21}
22
23#[inline(always)]
24pub fn fract(a: & F3) -> F3 {
25    a.fract()
26}
27
28#[inline(always)]
29pub fn length(a: & F3) -> F {
30    a.length()
31}
32
33#[inline(always)]
34pub fn mix(a: &F3, b: &F3, v: &F) -> F3 {
35    F3::new(
36        (1.0 - v) * a.x + b.x * v,
37        (1.0 - v) * a.y + b.y * v,
38        (1.0 - v) * a.z + b.z * v
39    )
40}
41
42#[inline(always)]
43pub fn mix_f(a: &F, b: &F, v: &F) -> F {
44    (1.0 - v) * a + b * v
45}
46
47#[inline(always)]
48pub fn smoothstep(e0: F, e1: F, x: F) -> F {
49    let t = ((x - e0) / (e1 - e0)). clamp(0.0, 1.0);
50    return t * t * (3.0 - 2.0 * t);
51}
52
53#[inline(always)]
54pub fn pow(a: &F3, exp: &F3) -> F3 {
55    F3::new(
56        a.x.powf(exp.x),
57        a.y.powf(exp.y),
58        a.z.powf(exp.z),
59    )
60}
61
62#[inline(always)]
63pub fn min(x: F, y: F) -> F {
64    if x < y {
65        x
66    } else {
67        y
68    }
69}
70
71#[inline(always)]
72pub fn max(x: F, y: F) -> F {
73    if x > y {
74        x
75    } else {
76        y
77    }
78}