Made test_rule more complex (and broken)
This commit is contained in:
parent
1b125b2f53
commit
726b7f5307
38
src/main.rs
38
src/main.rs
@ -21,25 +21,41 @@ struct RuleStep {
|
||||
|
||||
fn test_rule(_v: Vec<Mesh>) -> Vec<RuleStep> {
|
||||
|
||||
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);
|
||||
|
||||
let ret: Vec<RuleStep> = vec![
|
||||
RuleStep { geom: mesh, rule: Box::new(r), xform: m },
|
||||
// Quarter-turn in radians:
|
||||
let qtr = Rad::turn_div_4();
|
||||
|
||||
// Each element of this turns to a branch for the recursion:
|
||||
let turns: Vec<Mat4> = 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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user