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 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/3d') 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, -- cgit v1.2.3