From e390b6ed9b3650ae80ada68093413ed16475a645 Mon Sep 17 00:00:00 2001 From: Piotrek Date: Sat, 24 Apr 2021 22:24:10 +0200 Subject: [PATCH] added wall --- src/app/mod.rs | 42 +++++++++++++------------------- src/renderer/mod.rs | 9 ++++--- src/shaders/bin/shader.frag.spv | Bin 11328 -> 11760 bytes src/shaders/raycasting.cginc | 2 +- src/shaders/shading.cginc | 2 +- 5 files changed, 24 insertions(+), 31 deletions(-) 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 5d1cafada330bec78165e5fd01f9758d634a8333..a00dcb0a9c37ddfcbe265655fd8e083be91331c3 100644 GIT binary patch delta 3841 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 NQW!*I^+Q$${{=8WyQ%;H 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