void tracing for spot lights

This commit is contained in:
zomseffen 2025-01-14 16:01:18 +01:00
parent dd568a75e3
commit 4c4b8288d5
5 changed files with 55 additions and 81 deletions

View file

@ -168,10 +168,11 @@ impl EmptyVolume {
for x in 0..x_size+1 {
for y in 0..y_size+1 {
for z in 0..z_size+1 {
neighbors.set_element(reference.clone(), reference.borrow().position.x + x, reference.borrow().position.y + y, reference.borrow().position.z + z);
// fill only the edges
if x == 0 || x == x_size || y == 0 || y == y_size || z==0 || z == z_size {
/*if x == 0 || x == x_size || y == 0 || y == y_size || z==0 || z == z_size {
neighbors.set_element(reference.clone(), reference.borrow().position.x + x, reference.borrow().position.y + y, reference.borrow().position.z + z)
}
}*/
}
}
}
@ -724,7 +725,7 @@ impl EmptyVolume {
mem_index += 1;
v[mem_index] = self.position.y as u32;
mem_index += 1;
v[mem_index] = self.position.y as u32;
v[mem_index] = self.position.z as u32;
mem_index += 1;
//max sizes
v[mem_index] = self.size_x as u32;
@ -740,7 +741,7 @@ impl EmptyVolume {
mem_index += 1;
}
//color/roughness buffer sizes, 2 values each
if self.color_top.len() > 0 {
if self.color_top.len() > 1 {
v[mem_index] = self.size_x as u32;
v[mem_index + 1] = self.size_y as u32;
} else {
@ -749,7 +750,7 @@ impl EmptyVolume {
}
mem_index += 2;
if self.color_bottom.len() > 0 {
if self.color_bottom.len() > 1 {
v[mem_index] = self.size_x as u32;
v[mem_index + 1] = self.size_y as u32;
} else {
@ -758,7 +759,7 @@ impl EmptyVolume {
}
mem_index += 2;
if self.color_left.len() > 0 {
if self.color_left.len() > 1 {
v[mem_index] = self.size_y as u32;
v[mem_index + 1] = self.size_z as u32;
} else {
@ -767,7 +768,7 @@ impl EmptyVolume {
}
mem_index += 2;
if self.color_right.len() > 0 {
if self.color_right.len() > 1 {
v[mem_index] = self.size_y as u32;
v[mem_index + 1] = self.size_z as u32;
} else {
@ -776,7 +777,7 @@ impl EmptyVolume {
}
mem_index += 2;
if self.color_front.len() > 0 {
if self.color_front.len() > 1 {
v[mem_index] = self.size_x as u32;
v[mem_index + 1] = self.size_z as u32;
} else {
@ -785,7 +786,7 @@ impl EmptyVolume {
}
mem_index += 2;
if self.color_back.len() > 0 {
if self.color_back.len() > 1 {
v[mem_index] = self.size_x as u32;
v[mem_index + 1] = self.size_z as u32;
} else {
@ -794,7 +795,7 @@ impl EmptyVolume {
}
mem_index += 2;
//neighbor buffer sizes, 2 values each
if self.neighbor_top.len() > 0 {
if self.neighbor_top.len() > 1 {
v[mem_index] = self.size_x as u32;
v[mem_index + 1] = self.size_y as u32;
} else {
@ -803,7 +804,7 @@ impl EmptyVolume {
}
mem_index += 2;
if self.neighbor_bottom.len() > 0 {
if self.neighbor_bottom.len() > 1 {
v[mem_index] = self.size_x as u32;
v[mem_index + 1] = self.size_y as u32;
} else {
@ -812,7 +813,7 @@ impl EmptyVolume {
}
mem_index += 2;
if self.neighbor_left.len() > 0 {
if self.neighbor_left.len() > 1 {
v[mem_index] = self.size_y as u32;
v[mem_index + 1] = self.size_z as u32;
} else {
@ -821,7 +822,7 @@ impl EmptyVolume {
}
mem_index += 2;
if self.neighbor_right.len() > 0 {
if self.neighbor_right.len() > 1 {
v[mem_index] = self.size_y as u32;
v[mem_index + 1] = self.size_z as u32;
} else {
@ -830,7 +831,7 @@ impl EmptyVolume {
}
mem_index += 2;
if self.neighbor_front.len() > 0 {
if self.neighbor_front.len() > 1 {
v[mem_index] = self.size_x as u32;
v[mem_index + 1] = self.size_z as u32;
} else {
@ -839,7 +840,7 @@ impl EmptyVolume {
}
mem_index += 2;
if self.neighbor_back.len() > 0 {
if self.neighbor_back.len() > 1 {
v[mem_index] = self.size_x as u32;
v[mem_index + 1] = self.size_z as u32;
} else {
@ -860,7 +861,7 @@ impl EmptyVolume {
}
}
else {
v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]);
v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]);
mem_index += 1;
}
@ -874,7 +875,7 @@ impl EmptyVolume {
}
}
else {
v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]);
v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]);
mem_index += 1;
}
@ -888,7 +889,7 @@ impl EmptyVolume {
}
}
else {
v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]);
v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]);
mem_index += 1;
}
@ -902,7 +903,7 @@ impl EmptyVolume {
}
}
else {
v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]);
v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]);
mem_index += 1;
}
@ -916,7 +917,7 @@ impl EmptyVolume {
}
}
else {
v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]);
v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]);
mem_index += 1;
}
@ -930,14 +931,14 @@ impl EmptyVolume {
}
}
else {
v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]);
v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]);
mem_index += 1;
}
// neighbors
if self.neighbor_top.len() > 0 {
for value in &self.neighbor_top {
if let Some(reference) = value {
for nvalue in &self.neighbor_top {
if let Some(reference) = nvalue {
v[mem_index] = reference.borrow().memory_start as u32;
}
else {
@ -952,8 +953,8 @@ impl EmptyVolume {
}
if self.neighbor_bottom.len() > 0 {
for value in &self.neighbor_bottom {
if let Some(reference) = value {
for nvalue in &self.neighbor_bottom {
if let Some(reference) = nvalue {
v[mem_index] = reference.borrow().memory_start as u32;
}
else {
@ -968,8 +969,8 @@ impl EmptyVolume {
}
if self.neighbor_left.len() > 0 {
for value in &self.neighbor_left {
if let Some(reference) = value {
for nvalue in &self.neighbor_left {
if let Some(reference) = nvalue {
v[mem_index] = reference.borrow().memory_start as u32;
}
else {
@ -984,8 +985,8 @@ impl EmptyVolume {
}
if self.neighbor_right.len() > 0 {
for value in &self.neighbor_right {
if let Some(reference) = value {
for nvalue in &self.neighbor_right {
if let Some(reference) = nvalue {
v[mem_index] = reference.borrow().memory_start as u32;
}
else {
@ -1000,8 +1001,8 @@ impl EmptyVolume {
}
if self.neighbor_front.len() > 0 {
for value in &self.neighbor_front {
if let Some(reference) = value {
for nvalue in &self.neighbor_front {
if let Some(reference) = nvalue {
v[mem_index] = reference.borrow().memory_start as u32;
}
else {
@ -1016,8 +1017,8 @@ impl EmptyVolume {
}
if self.neighbor_back.len() > 0 {
for value in &self.neighbor_back {
if let Some(reference) = value {
for nvalue in &self.neighbor_back {
if let Some(reference) = nvalue {
v[mem_index] = reference.borrow().memory_start as u32;
}
else {