summaryrefslogtreecommitdiff
path: root/src/sdf.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sdf.rs')
-rw-r--r--src/sdf.rs30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/sdf.rs b/src/sdf.rs
index 892b2b5..6eb6ee3 100644
--- a/src/sdf.rs
+++ b/src/sdf.rs
@@ -114,11 +114,11 @@ pub enum R3ToR3 {
#[derive(GenRandom, Debug)]
pub enum RToR {
- #[prob(0)]
+ #[prob(1)]
Identity,
- #[prob(2)]
+ #[prob(0)]
Compose(Box<RToR>, Box<RToR>),
- #[prob(2)]
+ #[prob(0)]
Subtract(Constant),
}
@@ -128,6 +128,20 @@ pub enum R3ToR {
Sphere(Constant),
#[prob(1)]
Cube(Constant),
+ #[prob(1)]
+ BoxFrame {
+ #[scale(3.0)]
+ size: Constant,
+ #[scale(0.2)]
+ thickness: Constant
+ },
+ #[prob(1)]
+ Torus {
+ #[scale(3.0)]
+ radius: Constant,
+ #[scale(0.2)]
+ thickness: Constant
+ },
#[prob(8)]
Compose(Box<R3ToR3>, Box<R3ToR>, Box<RToR>),
#[prob(4)]
@@ -388,6 +402,16 @@ impl Function for R3ToR {
);
output
}
+ BoxFrame { size, thickness } => {
+ let output = var.next();
+ write_str!(code, "float {output} = sdf_box_frame({input}, vec3({size}), {thickness});\n");
+ output
+ }
+ Torus { radius, thickness } => {
+ let output = var.next();
+ write_str!(code, "float {output} = sdf_torus({input}, vec2({radius}, {thickness}));\n");
+ output
+ }
Mix(a, b, t) => {
let a_output = a.to_glsl(input, code, var);
let b_output = b.to_glsl(input, code, var);