summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-02 17:34:03 +0100
committerskal <pascal.massimino@gmail.com>2026-02-02 17:34:03 +0100
commit4eb0a67ad12fdd8c82d7cbc37991b6977cb86568 (patch)
tree711906bed69332a599c172fae16a81c73b2b9925 /src
parent1971b20ebca35bc8dbe24902dd5749413b43ff1b (diff)
fix(3d): Distinguish floor grid from object textures
- Switched floor back to PLANE type in test_3d_render. - Updated fragment shader to apply grid pattern ONLY to PLANE objects. - Restored noise-based bump mapping and texturing for BOX and other SDF primitives. - Verified correct visual appearance of floating cubes (no fixed grid).
Diffstat (limited to 'src')
-rw-r--r--src/3d/renderer.cc2
-rw-r--r--src/tests/test_3d_render.cc13
2 files changed, 9 insertions, 6 deletions
diff --git a/src/3d/renderer.cc b/src/3d/renderer.cc
index 8676db4..d39aac0 100644
--- a/src/3d/renderer.cc
+++ b/src/3d/renderer.cc
@@ -254,7 +254,7 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
normal = normalize(transpose(normal_matrix) * n_local);
// Apply texture to SDF color
- if (obj_type == 2.0) { // BOX (used for floor)
+ if (obj_type == 4.0) { // PLANE (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);
diff --git a/src/tests/test_3d_render.cc b/src/tests/test_3d_render.cc
index 9f046f9..a6db71b 100644
--- a/src/tests/test_3d_render.cc
+++ b/src/tests/test_3d_render.cc
@@ -137,10 +137,10 @@ void setup_scene() {
g_scene.clear();
srand(12345); // Fixed seed
- // Large floor, use BOX type (SDF) for receiving shadows
- Object3D floor(ObjectType::BOX);
+ // Large floor, use PLANE type
+ Object3D floor(ObjectType::PLANE);
floor.position = vec3(0, -2.0f, 0);
- floor.scale = vec3(25.0f, 0.2f, 25.0f);
+ floor.scale = vec3(25.0f, 1.0f, 25.0f); // Thicker for proxy hull safety
floor.color = vec4(0.8f, 0.8f, 0.8f, 1.0f);
g_scene.add_object(floor);
@@ -172,8 +172,11 @@ void setup_scene() {
float dist = 3.0f + (rand() % 100) * 0.05f; // Closer to center
float height = 0.5f + (rand() % 100) * 0.04f;
obj.position = vec3(std::cos(angle) * dist, height, std::sin(angle) * dist);
- float s = 0.6f + (rand() % 100) * 0.008f; // Larger
- obj.scale = vec3(s, s, s);
+
+ // Random non-uniform scale for debugging
+ float s = 0.6f + (rand() % 100) * 0.008f;
+ obj.scale = vec3(s, s * 1.2f, s * 0.8f);
+
obj.color = vec4((rand() % 100) / 100.0f, (rand() % 100) / 100.0f,
(rand() % 100) / 100.0f, 1.0f);
g_scene.add_object(obj);