From a8a49dac55b5daa43adac2fc4756e7bf388564a6 Mon Sep 17 00:00:00 2001 From: pommicket Date: Wed, 21 Dec 2022 22:07:54 -0500 Subject: more functions --- src/sdf.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src') diff --git a/src/sdf.rs b/src/sdf.rs index 87643cb..be9c470 100644 --- a/src/sdf.rs +++ b/src/sdf.rs @@ -176,6 +176,9 @@ pub enum R3ToR3 { #[prob(8)] #[only_if(params.max_depth >= 0)] Compose(Box, Box), + #[prob(4)] + #[only_if(params.max_depth >= 0)] + Mix(Box, Box, Constant), #[prob(1)] Translate(Constant3), #[prob(4)] @@ -250,6 +253,9 @@ pub enum R3ToR { #[prob(4)] #[only_if(params.max_depth >= 0)] Mix(Box, Box, Constant), + #[prob(4)] + #[only_if(params.max_depth >= 0)] + SinCos(Box, Box), #[prob(2)] #[only_if(params.max_depth >= 0)] SmoothMin(Box, Box), @@ -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); -- cgit v1.2.3