From 726b7f53074ac033e92574141b6dcb8a831f257d Mon Sep 17 00:00:00 2001 From: Chris Hodapp Date: Fri, 27 Dec 2019 12:24:29 -0500 Subject: [PATCH] Made test_rule more complex (and broken) --- src/main.rs | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index 04bd019..52bfc61 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,25 +21,41 @@ struct RuleStep { fn test_rule(_v: Vec) -> Vec { - let r = Rule::Recurse(test_rule); - let mesh = MeshBuilder::new().cube().build().unwrap(); - //let mtx = Matrix4::identity(); - let m: Mat4 = - Matrix4::from_translation(vec3(1.0, 0.0, 0.0)) * - Matrix4::from_angle_z(Rad(0.1)) * - Matrix4::from_scale(0.9); + + // Quarter-turn in radians: + let qtr = Rad::turn_div_4(); - let ret: Vec = vec![ - RuleStep { geom: mesh, rule: Box::new(r), xform: m }, + // Each element of this turns to a branch for the recursion: + let turns: Vec = vec![ + Matrix4::identity(), + Matrix4::from_angle_y(qtr), + Matrix4::from_angle_y(qtr * 2.0), + Matrix4::from_angle_y(qtr * 3.0), ]; - ret + let gen_rulestep = |rot: &Mat4| -> RuleStep { + let m: Mat4 = rot * + Matrix4::from_translation(vec3(1.5, 0.0, 0.0)) * + Matrix4::from_scale(0.6); + let r = Rule::Recurse(test_rule); + RuleStep { geom: mesh.clone(), rule: Box::new(r), xform: m } + }; + + turns.iter().map(gen_rulestep).collect() } +// TODO: Do I want to make 'geom' shared somehow, maybe with Rc? I +// could end up having a lot of identical geometry that need not be +// duplicated until it is transformed into the global space + +// Bigger TODO: either rule_to_mesh or test_rule is doing something +// totally wrong here (look at the generated mesh). I suspect it is +// appending geometry multiple times because my semantics are vague. + fn rule_to_mesh(rule: &Rule, xform: Mat4, iter_num: u32) -> Mesh { - let max_iters: u32 = 50; + let max_iters: u32 = 4; let mut mesh = MeshBuilder::new().with_indices(vec![]).with_positions(vec![]).build().unwrap(); if iter_num >= max_iters {