From 7f57832c8b64ad560409523dfd69a324245a7761 Mon Sep 17 00:00:00 2001 From: skal Date: Mon, 2 Feb 2026 14:20:29 +0100 Subject: test(3d): Add procedural grid to floor and enable texturing - Modified 'test_3d_render' to generate and use a procedural 'grid' texture for the floor. - Updated fragment shader to sample the texture for rasterized objects, adding a grid pattern to the floor. - This provides visual detail and contrast, making raymarched shadows much easier to observe and verify. --- src/3d/renderer.cc | 9 ++++++++- src/tests/test_3d_render.cc | 16 ++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/3d/renderer.cc b/src/3d/renderer.cc index 6de7fee..14c05f7 100644 --- a/src/3d/renderer.cc +++ b/src/3d/renderer.cc @@ -151,6 +151,7 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { var p: vec3; var normal: vec3; + var base_color = in.color.rgb; let light_dir = normalize(vec3(0.2, 1.0, 0.2)); // More vertical light for easier shadow debugging if (obj_type == 0.0) { // Rasterized object @@ -160,6 +161,11 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { // Correct normal transformation using inverse transpose let mat3_it = mat3x3(obj.model_inv_tr[0].xyz, obj.model_inv_tr[1].xyz, obj.model_inv_tr[2].xyz); normal = normalize(mat3_it * local_normal); + + // Apply grid texture for color to floor + let uv = p.xz * 0.1; + let grid_val = textureSample(noise_tex, noise_sampler, uv).r; + base_color = base_color * (0.3 + 0.7 * grid_val); } else { // SDF object let center = vec3(obj.model[3].x, obj.model[3].y, obj.model[3].z); let scale = length(vec3(obj.model[0].x, obj.model[0].y, obj.model[0].z)); @@ -224,8 +230,9 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let shadow = calc_shadow(p + normal * 0.01, light_dir, 0.0, 20.0); let lighting = (max(dot(normal, light_dir), 0.0) * shadow) + 0.1; - return vec4(in.color.rgb * lighting, 1.0); + return vec4(base_color * lighting, 1.0); } + )"; void Renderer3D::init(WGPUDevice device, WGPUQueue queue, diff --git a/src/tests/test_3d_render.cc b/src/tests/test_3d_render.cc index fbf5fc0..71cc862 100644 --- a/src/tests/test_3d_render.cc +++ b/src/tests/test_3d_render.cc @@ -206,14 +206,14 @@ int main(int argc, char** argv) { g_renderer.resize(platform_state.width, platform_state.height); g_textures.init(g_device, g_queue); - ProceduralTextureDef noise_def; - noise_def.width = 256; - noise_def.height = 256; - noise_def.gen_func = gen_periodic_noise; - noise_def.params = {1234.0f, 16.0f}; - g_textures.create_procedural_texture("noise", noise_def); - - g_renderer.set_noise_texture(g_textures.get_texture_view("noise")); + ProceduralTextureDef grid_def; + grid_def.width = 256; + grid_def.height = 256; + grid_def.gen_func = procedural::gen_grid; + grid_def.params = {10.0f, 1.0f}; // Frequency, thickness + g_textures.create_procedural_texture("floor_grid", grid_def); + + g_renderer.set_noise_texture(g_textures.get_texture_view("floor_grid")); setup_scene(); -- cgit v1.2.3