diff options
Diffstat (limited to 'src/3d/renderer.cc')
| -rw-r--r-- | src/3d/renderer.cc | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/3d/renderer.cc b/src/3d/renderer.cc index 45276ea..488846d 100644 --- a/src/3d/renderer.cc +++ b/src/3d/renderer.cc @@ -168,10 +168,11 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> { let normal_matrix = mat3x3<f32>(obj.inv_model[0].xyz, obj.inv_model[1].xyz, obj.inv_model[2].xyz); normal = normalize(transpose(normal_matrix) * local_normal); - // Apply grid texture to floor (type 0 is floor in test_3d_render) - 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); + // Apply grid pattern to floor + let uv = p.xz * 0.5; + let grid = 0.5 + 0.5 * sin(uv.x * 3.14) * sin(uv.y * 3.14); + let grid_val = smoothstep(0.45, 0.55, grid); + base_color = base_color * (0.5 + 0.5 * grid_val); } else { // SDF path let ro = globals.camera_pos_time.xyz; let rd = normalize(in.world_pos - ro); @@ -232,6 +233,18 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> { let n_local = normalize(vec3<f32>(d_x1 - d_x2, d_y1 - d_y2, d_z1 - d_z2)); let normal_matrix = mat3x3<f32>(obj.inv_model[0].xyz, obj.inv_model[1].xyz, obj.inv_model[2].xyz); normal = normalize(transpose(normal_matrix) * n_local); + + // Apply texture to SDF color + if (obj_type == 2.0) { // BOX (used for floor) + let uv_grid = p.xz * 0.5; + let grid = 0.5 + 0.5 * sin(uv_grid.x * 3.14) * sin(uv_grid.y * 3.14); + let grid_val = smoothstep(0.45, 0.55, grid); + base_color = base_color * (0.5 + 0.5 * grid_val); + } else { + let uv_hit = vec2<f32>(atan2(q_hit.x, q_hit.z) / 6.28 + 0.5, acos(clamp(q_hit.y / length(q_hit), -1.0, 1.0)) / 3.14); + let tex_val = textureSample(noise_tex, noise_sampler, uv_hit).r; + base_color = base_color * (0.7 + 0.3 * tex_val); + } } let shadow = calc_shadow(p, light_dir, 0.05, 20.0, in.instance_index); |
