diff options
author | pommicket <pommicket@gmail.com> | 2022-12-21 22:07:54 -0500 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2022-12-21 22:07:54 -0500 |
commit | a8a49dac55b5daa43adac2fc4756e7bf388564a6 (patch) | |
tree | eb6579e686c500017430ad086fcd20b01fc6c0d0 /src/sdf.rs | |
parent | 7bde2ed24256f6216b6c910b3e1f70532be0d941 (diff) |
more functions
Diffstat (limited to 'src/sdf.rs')
-rw-r--r-- | src/sdf.rs | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -176,6 +176,9 @@ pub enum R3ToR3 { #[prob(8)] #[only_if(params.max_depth >= 0)] Compose(Box<R3ToR3>, Box<R3ToR3>), + #[prob(4)] + #[only_if(params.max_depth >= 0)] + Mix(Box<R3ToR3>, Box<R3ToR3>, Constant), #[prob(1)] Translate(Constant3), #[prob(4)] @@ -250,6 +253,9 @@ pub enum R3ToR { #[prob(4)] #[only_if(params.max_depth >= 0)] Mix(Box<R3ToR>, Box<R3ToR>, Constant), + #[prob(4)] + #[only_if(params.max_depth >= 0)] + SinCos(Box<R3ToR>, Box<R3ToR>), #[prob(2)] #[only_if(params.max_depth >= 0)] SmoothMin(Box<R3ToR>, Box<R3ToR>), @@ -486,6 +492,16 @@ impl Function for R3ToR3 { let a_output = a.to_glsl(input, code, var); b.to_glsl(a_output, code, var) } + Mix(a, b, t) => { + let a_output = a.to_glsl(input, code, var); + let b_output = b.to_glsl(input, code, var); + let output = var.next(); + write_str!( + code, + "vec3 {output} = mix({a_output}, {b_output}, clamp({t}, 0.0, 1.0));\n" + ); + output + } Arctan(c) => { let output = var.next(); // we need to scale arctan(cx) so it doesn't break the SDF @@ -671,6 +687,16 @@ impl Function for R3ToR { ); output } + SinCos(a, b) => { + let a = a.to_glsl(input, code, var); + let b = b.to_glsl(input, code, var); + let output = var.next(); + write_str!( + code, + "float {output} = sin({a}) * cos({b});\n" + ); + output + } Compose(pre, f, post) => { let pre_output = pre.to_glsl(input, code, var); let f_output = f.to_glsl(pre_output, code, var); |