transparency first version
This commit is contained in:
parent
f0fa28bdd8
commit
66902df99c
14 changed files with 225 additions and 92 deletions
src/scene
|
@ -7,7 +7,7 @@ use crate::primitives::cube::Cube;
|
|||
|
||||
extern crate rand;
|
||||
|
||||
pub const CHUNK_SIZE_EXPONENT: u32 = 8;
|
||||
pub const CHUNK_SIZE_EXPONENT: u32 = 6;
|
||||
pub const CHUNK_SIZE: usize = (2 as usize).pow(CHUNK_SIZE_EXPONENT);
|
||||
pub const MAX_TREE_DEPTH: usize = CHUNK_SIZE_EXPONENT as usize - 2;
|
||||
pub const MIN_CHUNK_SIZE: usize = CHUNK_SIZE / (2 as usize).pow(MAX_TREE_DEPTH as u32);
|
||||
|
@ -378,13 +378,13 @@ impl<T: Clone> OctTree<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn test_element(&self, x: usize, y: usize, z: usize) -> (bool, usize, (usize, usize, usize)) {
|
||||
pub fn test_element(&self, x: usize, y: usize, z: usize) -> (bool, usize, (usize, usize, usize), Option<T>) {
|
||||
self.test_element_internal(x, y, z, 0, 0, 0)
|
||||
}
|
||||
|
||||
fn test_element_internal(&self, x: usize, y: usize, z: usize, node_start_x: usize, node_start_y: usize, node_start_z: usize) -> (bool, usize, (usize, usize, usize)) {
|
||||
fn test_element_internal(&self, x: usize, y: usize, z: usize, node_start_x: usize, node_start_y: usize, node_start_z: usize) -> (bool, usize, (usize, usize, usize), Option<T>) {
|
||||
if x >= self.size || y >= self.size || z >= self.size {
|
||||
return (false, 0, (0, 0, 0))
|
||||
return (false, 0, (0, 0, 0), None)
|
||||
}
|
||||
|
||||
if self.size > MIN_CHUNK_SIZE {
|
||||
|
@ -396,7 +396,7 @@ impl<T: Clone> OctTree<T> {
|
|||
Some(child) => {
|
||||
child.borrow().test_element_internal(x - mid_point, y - mid_point, z - mid_point, node_start_x + mid_point, node_start_y + mid_point, node_start_z + mid_point)
|
||||
},
|
||||
None => (false, mid_point, (node_start_x + mid_point, node_start_y + mid_point, node_start_z + mid_point))
|
||||
None => (false, mid_point, (node_start_x + mid_point, node_start_y + mid_point, node_start_z + mid_point), None)
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -404,7 +404,7 @@ impl<T: Clone> OctTree<T> {
|
|||
Some(child) => {
|
||||
child.borrow().test_element_internal( x - mid_point, y - mid_point, z, node_start_x + mid_point, node_start_y + mid_point, node_start_z)
|
||||
},
|
||||
None => (false, mid_point, (node_start_x + mid_point, node_start_y + mid_point, node_start_z))
|
||||
None => (false, mid_point, (node_start_x + mid_point, node_start_y + mid_point, node_start_z), None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -414,7 +414,7 @@ impl<T: Clone> OctTree<T> {
|
|||
Some(child) => {
|
||||
child.borrow().test_element_internal(x - mid_point, y, z - mid_point, node_start_x + mid_point, node_start_y, node_start_z + mid_point)
|
||||
},
|
||||
None => (false, mid_point, (node_start_x + mid_point, node_start_y, node_start_z + mid_point))
|
||||
None => (false, mid_point, (node_start_x + mid_point, node_start_y, node_start_z + mid_point), None)
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -422,7 +422,7 @@ impl<T: Clone> OctTree<T> {
|
|||
Some(child) => {
|
||||
child.borrow().test_element_internal(x - mid_point, y, z, node_start_x + mid_point, node_start_y, node_start_z)
|
||||
},
|
||||
None => (false, mid_point, (node_start_x + mid_point, node_start_y, node_start_z))
|
||||
None => (false, mid_point, (node_start_x + mid_point, node_start_y, node_start_z), None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -434,7 +434,7 @@ impl<T: Clone> OctTree<T> {
|
|||
Some(child) => {
|
||||
child.borrow().test_element_internal(x, y - mid_point, z - mid_point, node_start_x, node_start_y + mid_point, node_start_z + mid_point)
|
||||
},
|
||||
None => (false, mid_point, (node_start_x, node_start_y + mid_point, node_start_z + mid_point))
|
||||
None => (false, mid_point, (node_start_x, node_start_y + mid_point, node_start_z + mid_point), None)
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -442,7 +442,7 @@ impl<T: Clone> OctTree<T> {
|
|||
Some(child) => {
|
||||
child.borrow().test_element_internal(x, y - mid_point, z, node_start_x, node_start_y + mid_point, node_start_z)
|
||||
},
|
||||
None => (false, mid_point, (node_start_x, node_start_y + mid_point, node_start_z))
|
||||
None => (false, mid_point, (node_start_x, node_start_y + mid_point, node_start_z), None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -452,7 +452,7 @@ impl<T: Clone> OctTree<T> {
|
|||
Some(child) => {
|
||||
child.borrow().test_element_internal(x, y, z - mid_point, node_start_x, node_start_y, node_start_z + mid_point)
|
||||
},
|
||||
None => (false, mid_point, (node_start_x, node_start_y, node_start_z + mid_point))
|
||||
None => (false, mid_point, (node_start_x, node_start_y, node_start_z + mid_point), None)
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -460,18 +460,18 @@ impl<T: Clone> OctTree<T> {
|
|||
Some(child) => {
|
||||
child.borrow().test_element_internal(x, y, z, node_start_x, node_start_y, node_start_z)
|
||||
},
|
||||
None => (false, mid_point, (node_start_x , node_start_y, node_start_z))
|
||||
None => (false, mid_point, (node_start_x , node_start_y, node_start_z), None)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if let Some(_) = self.blocks[z * MIN_CHUNK_SIZE * MIN_CHUNK_SIZE + y * MIN_CHUNK_SIZE + x] {
|
||||
(true, 1, (x, y, z))
|
||||
if let Some(c) = &self.blocks[z * MIN_CHUNK_SIZE * MIN_CHUNK_SIZE + y * MIN_CHUNK_SIZE + x] {
|
||||
(true, 1, (x, y, z), Some(c.clone()))
|
||||
}
|
||||
else {
|
||||
(false, 1, (x, y, z))
|
||||
(false, 1, (x, y, z), None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue