summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/3d/renderer.cc21
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);