diff --git a/src/app/mod.rs b/src/app/mod.rs index 0a04bfa..4c7fc75 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -39,31 +39,19 @@ impl App { let mut rng = rand::thread_rng(); - let start = std::time::Instant::now(); + + // Ground for bx in 0..16 { for bz in 0..16 { - - let brick_id = renderer.brick_get_id(bx, 0, bz); - renderer.brick_mark_changed(brick_id); + let brick_id = renderer.brick_get_id(bx, 0, bz, true); for x in 0..32 { for z in 0..32 { // Dirt - for y in 0..31 { - renderer.brick_set_voxel(brick_id, x, y, z, 1); - } + renderer.brick_set_voxel(brick_id, x, 0, z, 1); // Grass - renderer.brick_set_voxel(brick_id, x, 31, z, 2); - } - } - - let brick_id = renderer.brick_get_id(bx, 1, bz); - renderer.brick_mark_changed(brick_id); - for x in 0..32 { - for z in 0..32 { - // Dirt - let h = (rng.gen::() * 4.0) as usize; - for y in 0..h { + let h = (rng.gen::() * 5.0) as usize; + for y in 1..h { renderer.brick_set_voxel(brick_id, x, y, z, 2); } } @@ -71,16 +59,20 @@ impl App { } } - let brick_id = renderer.brick_get_id(8, 2, 8); - for x in 0..32 { - for z in 0..32 { - // White block - for y in 0..32 { - renderer.brick_set_voxel(brick_id, x, y, z, 3); + // Wall + for bz in 4..8 { + for by in 0..4 { + // Brick + let brick_id = renderer.brick_get_id(8, by, bz, true); + for x in 14..18 { + for z in 0..32 { + for y in 0..32 { + renderer.brick_set_voxel(brick_id, x, y, z, 3); + } + } } } } - renderer.brick_mark_changed(brick_id); println!("Generated in {}ms", start.elapsed().as_millis()); diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index 6ba9f4b..c82f271 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -216,9 +216,8 @@ impl Renderer { */ #[allow(dead_code)] pub fn set_voxel(&mut self, x: usize, y: usize, z:usize, value: u8) { - let brick_id = self.brick_get_id(x/32, y/32, z/32 ); + let brick_id = self.brick_get_id(x/32, y/32, z/32, true); self.brick_set_voxel(brick_id, x%32, y%32, z%32, value); - self.brick_mark_changed(brick_id); } /* @@ -233,7 +232,7 @@ impl Renderer { /* * Gets brick id */ - pub fn brick_get_id(&mut self, x: usize, y: usize, z:usize) -> usize { + pub fn brick_get_id(&mut self, x: usize, y: usize, z:usize, mark_changed: bool) -> usize { // Get node let node_idx = x + buffers::WORLD_SIZE * (y + buffers::WORLD_SIZE * z); let mut node_value = self.node_buffer.nodes[node_idx]; @@ -245,7 +244,9 @@ impl Renderer { } // Get brick id from node value - (node_value - 1) as usize + let brick_id = (node_value - 1) as usize; + if mark_changed { self.brick_mark_changed(brick_id); } + brick_id } /* diff --git a/src/shaders/bin/shader.frag.spv b/src/shaders/bin/shader.frag.spv index 5d1cafa..a00dcb0 100644 Binary files a/src/shaders/bin/shader.frag.spv and b/src/shaders/bin/shader.frag.spv differ diff --git a/src/shaders/raycasting.cginc b/src/shaders/raycasting.cginc index cd906de..5218905 100644 --- a/src/shaders/raycasting.cginc +++ b/src/shaders/raycasting.cginc @@ -34,7 +34,7 @@ HitResult castBricks(vec3 origin, vec3 start, vec3 dir, vec3 incAxis, uint addr) // Normal vector (negate previous increment axis and mult by sign) vec3 normal = -incAxis * raySign; - return HitResult(brick-1, hitPoint, normal); + return HitResult(brick, hitPoint, normal); } // Get new closest axis to increment diff --git a/src/shaders/shading.cginc b/src/shaders/shading.cginc index 95d2c6d..212436f 100644 --- a/src/shaders/shading.cginc +++ b/src/shaders/shading.cginc @@ -13,6 +13,6 @@ vec3 applyLighting(vec3 hitPoint, vec3 view, vec3 normal, uint brick) vec3 specular = light_color * pow(max(dot(view, reflect(-_SunDir, normal)), 0.0), 32); // Combine colors - vec3 object_color = _Materials[brick].albedo.rgb;//vec3(0.0, 0.1, 0.5); + vec3 object_color = _Materials[brick-1].albedo.rgb;//vec3(0.0, 0.1, 0.5); return (ambient + diffuse + specular) * object_color; } \ No newline at end of file