keeps track of iterations glaobally, fix endless loop at min border

This commit is contained in:
zomseffen 2025-03-13 16:53:24 +01:00
parent e3829a73e4
commit 839907c8a7
5 changed files with 70 additions and 56 deletions

View file

@ -224,8 +224,8 @@ impl App {
image::create_texture_image_view(&device, &mut data)?;
image::create_texture_sampler(&device, &mut data)?;
//let cur_pos = generators::generate_test_scene(&mut scene_handler, &mut data)?;
let cur_pos = generators::generate_test_scene2(&mut scene_handler, &mut data, 31, 31,1, 5)?;
let cur_pos = generators::generate_test_scene(&mut scene_handler, &mut data)?;
//let cur_pos = generators::generate_test_scene2(&mut scene_handler, &mut data, 31, 31,1, 5)?;
scene_handler.prepare_data(&instance, &device, &mut data)?;
buffer::create_uniform_buffers(&instance, &device, &mut data)?;

View file

@ -553,16 +553,18 @@ impl EmptyVolume {
let mut bottom_neighbors = vec![];
let mut bottom_elements_num = 0;
let mut all_same = true;
for x in 0..reference.borrow().size_x {
for y in 0..reference.borrow().size_y {
if let Some(c) = neighbors.get_element(reference.borrow().grid_position.x + x, reference.borrow().grid_position.y + y, z_min_pos) {
bottom_elements_num += 1;
bottom_neighbors.push(Some(c.clone()));
all_same = all_same && (bottom_neighbors[0] == Some(c));
}
else {
bottom_neighbors.push(None);
all_same = all_same && (bottom_neighbors[0] == None);
if reference.borrow().grid_position.z != 0 {
for x in 0..reference.borrow().size_x {
for y in 0..reference.borrow().size_y {
if let Some(c) = neighbors.get_element(reference.borrow().grid_position.x + x, reference.borrow().grid_position.y + y, z_min_pos) {
bottom_elements_num += 1;
bottom_neighbors.push(Some(c.clone()));
all_same = all_same && (bottom_neighbors[0] == Some(c));
}
else {
bottom_neighbors.push(None);
all_same = all_same && (bottom_neighbors[0] == None);
}
}
}
}
@ -639,16 +641,18 @@ impl EmptyVolume {
let mut front_neighbors = vec![];
let mut front_elements_num = 0;
let mut all_same = true;
for x in 0..reference.borrow().size_x {
for z in 0..reference.borrow().size_z {
if let Some(c) = neighbors.get_element(reference.borrow().grid_position.x + x, y_min_pos, reference.borrow().grid_position.z + z) {
front_elements_num += 1;
front_neighbors.push(Some(c.clone()));
all_same = all_same && (front_neighbors[0] == Some(c));
}
else {
front_neighbors.push(None);
all_same = all_same && (front_neighbors[0] == None);
if reference.borrow().grid_position.y != 0 {
for x in 0..reference.borrow().size_x {
for z in 0..reference.borrow().size_z {
if let Some(c) = neighbors.get_element(reference.borrow().grid_position.x + x, y_min_pos, reference.borrow().grid_position.z + z) {
front_elements_num += 1;
front_neighbors.push(Some(c.clone()));
all_same = all_same && (front_neighbors[0] == Some(c));
}
else {
front_neighbors.push(None);
all_same = all_same && (front_neighbors[0] == None);
}
}
}
}
@ -668,16 +672,18 @@ impl EmptyVolume {
let mut left_neighbors = vec![];
let mut left_elements_num = 0;
let mut all_same = true;
for y in 0..reference.borrow().size_y {
for z in 0..reference.borrow().size_z {
if let Some(c) = neighbors.get_element(x_min_pos, reference.borrow().grid_position.y + y, reference.borrow().grid_position.z + z) {
left_elements_num += 1;
left_neighbors.push(Some(c.clone()));
all_same = all_same && (left_neighbors[0] == Some(c));
}
else {
left_neighbors.push(None);
all_same = all_same && (left_neighbors[0] == None);
if reference.borrow().grid_position.x != 0 {
for y in 0..reference.borrow().size_y {
for z in 0..reference.borrow().size_z {
if let Some(c) = neighbors.get_element(x_min_pos, reference.borrow().grid_position.y + y, reference.borrow().grid_position.z + z) {
left_elements_num += 1;
left_neighbors.push(Some(c.clone()));
all_same = all_same && (left_neighbors[0] == Some(c));
}
else {
left_neighbors.push(None);
all_same = all_same && (left_neighbors[0] == None);
}
}
}
}

View file

@ -58,8 +58,8 @@ pub fn generate_test_scene(scene: &mut Scene, data: &mut AppData) -> Result<(Poi
pos: vec3(10.0, 10.0, 10.0),
color: vec3(0.0, 0.0, 0.9),
tex_coord: vec2(0.0, 0.0),
transparent: false,
roughness: 128,
transparent: true,
roughness: 32,
};
oct_tree1.set_cube(cube.clone());
@ -67,8 +67,8 @@ pub fn generate_test_scene(scene: &mut Scene, data: &mut AppData) -> Result<(Poi
pos: vec3(10.0, 10.0, 9.0),
color: vec3(0.0, 0.0, 0.9),
tex_coord: vec2(0.0, 0.0),
transparent: false,
roughness: 128,
transparent: true,
roughness: 32,
};
oct_tree1.set_cube(cube.clone());
@ -91,7 +91,7 @@ pub fn generate_test_scene(scene: &mut Scene, data: &mut AppData) -> Result<(Poi
};
oct_tree2.set_cube(cube.clone());
scene.point_lights.push(Rc::new(RefCell::new(PointLight { pos: vec3(11.0 + grid_size as f32, 11.0 + grid_size as f32, 11.0) * scale, color: vec3(1.0, 1.0, 1.0), memory_start: 0 })));
scene.point_lights.push(Rc::new(RefCell::new(PointLight { pos: vec3(11.0 + grid_size as f32, 11.0 + grid_size as f32, 11.0) * scale, color: vec3(2.0, 2.0, 2.0), memory_start: 0 })));
scene.point_lights.push(Rc::new(RefCell::new(PointLight { pos: vec3(9.0 + grid_size as f32, 9.0 + grid_size as f32, 11.0) * scale, color: vec3(0.5, 0.5, 0.5), memory_start: 0 })));
scene.directional_lights.push(Rc::new(RefCell::new(DirectionalLight { direction: vec3(1.0, 1.0, -1.0), color: vec3(0.1, 0.1, 0.1), memory_start: 0 })));