Add 'fraying' effect on spiral
This commit is contained in:
parent
5bee3c8aa3
commit
3ce441d86a
@ -2,7 +2,7 @@ use std::f32::consts::{FRAC_PI_2, FRAC_PI_3, PI};
|
|||||||
use std::f32;
|
use std::f32;
|
||||||
|
|
||||||
use nalgebra::*;
|
use nalgebra::*;
|
||||||
//use rand::Rng;
|
use rand::Rng;
|
||||||
|
|
||||||
use crate::util;
|
use crate::util;
|
||||||
use crate::util::VecExt;
|
use crate::util::VecExt;
|
||||||
@ -374,7 +374,6 @@ pub struct NestedSpiral {
|
|||||||
faces: Vec<usize>,
|
faces: Vec<usize>,
|
||||||
seeds: Vec<Vec<Transform>>,
|
seeds: Vec<Vec<Transform>>,
|
||||||
incr: Vec<Transform>,
|
incr: Vec<Transform>,
|
||||||
max_count: usize,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NestedSpiral {
|
impl NestedSpiral {
|
||||||
@ -433,13 +432,12 @@ impl NestedSpiral {
|
|||||||
faces: vec![],
|
faces: vec![],
|
||||||
incr: incr,
|
incr: incr,
|
||||||
seeds: seeds,
|
seeds: seeds,
|
||||||
max_count: 500,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn iter(&mut self, idx: usize, b: [usize; 4], xforms: &Vec<Transform>) {
|
pub fn iter(&mut self, count: usize, b: [usize; 4], xforms: &Vec<Transform>) {
|
||||||
|
|
||||||
if idx >= self.max_count {
|
if count <= 0 {
|
||||||
self.faces.extend_from_slice(&[b[0], b[2], b[1], b[0], b[3], b[2]]);
|
self.faces.extend_from_slice(&[b[0], b[2], b[1], b[0], b[3], b[2]]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -458,12 +456,13 @@ impl NestedSpiral {
|
|||||||
.map(|(m,incr)| ((*incr) * (*m)))
|
.map(|(m,incr)| ((*incr) * (*m)))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
self.iter(idx + 1, [n0, n0 + 1, n0 + 2, n0 + 3], &xforms_next);
|
self.iter(count - 1, [n0, n0 + 1, n0 + 2, n0 + 3], &xforms_next);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run(mut self) -> Mesh {
|
pub fn run(mut self) -> Mesh {
|
||||||
|
|
||||||
let seeds = self.seeds.clone();
|
let seeds = self.seeds.clone();
|
||||||
|
let mut rng = rand::thread_rng();
|
||||||
|
|
||||||
for seed in seeds {
|
for seed in seeds {
|
||||||
let global = seed.iter().fold(id(), |acc, m| acc * (*m));
|
let global = seed.iter().fold(id(), |acc, m| acc * (*m));
|
||||||
@ -471,7 +470,10 @@ impl NestedSpiral {
|
|||||||
let (n0, _) = self.verts.append_indexed(g);
|
let (n0, _) = self.verts.append_indexed(g);
|
||||||
self.faces.extend_from_slice(&[n0, n0+1, n0+2, n0, n0+2, n0+3]);
|
self.faces.extend_from_slice(&[n0, n0+1, n0+2, n0, n0+2, n0+3]);
|
||||||
|
|
||||||
self.iter(0, [n0, n0 + 1, n0 + 2, n0 + 3], &seed);
|
let count: usize = rng.gen_range(100, 500);
|
||||||
|
// Old effect: just set count to 500
|
||||||
|
|
||||||
|
self.iter(count, [n0, n0 + 1, n0 + 2, n0 + 3], &seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Mesh {
|
return Mesh {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user