diff options
| -rw-r--r-- | src/3d/renderer.cc | 9 | ||||
| -rw-r--r-- | src/tests/test_3d_render.cc | 14 |
2 files changed, 15 insertions, 8 deletions
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<f32> { var p: vec3<f32>; var normal: vec3<f32>; + var base_color = in.color.rgb; let light_dir = normalize(vec3<f32>(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<f32> { // Correct normal transformation using inverse transpose let mat3_it = mat3x3<f32>(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<f32>(obj.model[3].x, obj.model[3].y, obj.model[3].z); let scale = length(vec3<f32>(obj.model[0].x, obj.model[0].y, obj.model[0].z)); @@ -224,8 +230,9 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> { 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<f32>(in.color.rgb * lighting, 1.0); + return vec4<f32>(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); + 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("noise")); + g_renderer.set_noise_texture(g_textures.get_texture_view("floor_grid")); setup_scene(); |
