fixes double neighbor assignement and cubes inside of empty volumes after skipping to grow

This commit is contained in:
zomseffen 2025-02-26 12:31:58 +01:00
parent 5353f28acd
commit 457d3e2d6b
7 changed files with 165 additions and 105 deletions
src/scene

View file

@ -121,6 +121,7 @@ pub fn generate_test_scene(scene: &mut Scene, data: &mut AppData) -> Result<(Poi
pub fn generate_test_scene2(scene: &mut Scene, data: &mut AppData, chunk_num_x: usize, chunk_num_y: usize, chunk_num_z: usize, num_gaussians: usize) -> Result<(Point3<f32>)> {
let mut rng = rand::thread_rng();
let grid_size = CHUNK_SIZE as i32;
let max_x = chunk_num_x * grid_size as usize;
@ -130,7 +131,7 @@ pub fn generate_test_scene2(scene: &mut Scene, data: &mut AppData, chunk_num_x:
let mut height_map = vec![vec![0.0; max_y]; max_x];
for i in 0..num_gaussians {
let height = rng.gen_range(0..max_z / 2) as f32;
let height = rng.gen_range(16..max_z / 2) as f32;
let center_x = rng.gen_range(0..max_x) as f32;
let center_y = rng.gen_range(0..max_y) as f32;
@ -144,7 +145,17 @@ pub fn generate_test_scene2(scene: &mut Scene, data: &mut AppData, chunk_num_x:
}
}
let oct_trees = vec![vec![vec![Rc::new(RefCell::new(OctTree::<Cube>::create(CHUNK_SIZE)?)); chunk_num_x]; chunk_num_y]; chunk_num_z];
let mut oct_trees = vec![];
for z in 0..chunk_num_z {
oct_trees.push(vec![]);
for y in 0..chunk_num_y {
oct_trees[z].push(vec![]);
for x in 0..chunk_num_x {
oct_trees[z][y].push(Rc::new(RefCell::new(OctTree::<Cube>::create(CHUNK_SIZE)?)));
}
}
}
for x in 0..max_x {
for y in 0..max_y {
@ -153,7 +164,7 @@ pub fn generate_test_scene2(scene: &mut Scene, data: &mut AppData, chunk_num_x:
if height < max_z {
let shade = (rng.gen_range(0..50) as f32) / 100.0;
let cube = Cube {
pos: vec3(x as f32, y as f32, (height % grid_size as usize) as f32),
pos: vec3((x % grid_size as usize) as f32, (y % grid_size as usize) as f32, (height % grid_size as usize) as f32),
color: vec3(shade, 1.0, shade),
tex_coord: vec2(0.0, 0.0),
transparent: false,
@ -171,7 +182,7 @@ pub fn generate_test_scene2(scene: &mut Scene, data: &mut AppData, chunk_num_x:
pillar_height -= 1;
let shade = (rng.gen_range(1..50) as f32) / 100.0;
let cube = Cube {
pos: vec3(x as f32, y as f32, (pillar_height % grid_size as usize) as f32),
pos: vec3((x % grid_size as usize) as f32, (y % grid_size as usize) as f32, (pillar_height % grid_size as usize) as f32),
color: vec3(shade, shade / 2.0, 0.0),
tex_coord: vec2(0.0, 0.0),
transparent: false,