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> {
|
fn test_rule(_v: Vec<Mesh>) -> Vec<RuleStep> {
|
||||||
|
|
||||||
let r = Rule::Recurse(test_rule);
|
|
||||||
|
|
||||||
let mesh = MeshBuilder::new().cube().build().unwrap();
|
let mesh = MeshBuilder::new().cube().build().unwrap();
|
||||||
//let mtx = Matrix4::identity();
|
|
||||||
let m: Mat4 =
|
// Quarter-turn in radians:
|
||||||
Matrix4::from_translation(vec3(1.0, 0.0, 0.0)) *
|
let qtr = Rad::turn_div_4();
|
||||||
Matrix4::from_angle_z(Rad(0.1)) *
|
|
||||||
Matrix4::from_scale(0.9);
|
|
||||||
|
|
||||||
let ret: Vec<RuleStep> = vec![
|
// Each element of this turns to a branch for the recursion:
|
||||||
RuleStep { geom: mesh, rule: Box::new(r), xform: m },
|
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 {
|
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();
|
let mut mesh = MeshBuilder::new().with_indices(vec![]).with_positions(vec![]).build().unwrap();
|
||||||
|
|
||||||
if iter_num >= max_iters {
|
if iter_num >= max_iters {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user