diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-02 16:34:31 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-02 16:34:31 +0100 |
| commit | fcf1cbe0e520137d729152239c2aed68d9952cc5 (patch) | |
| tree | b9c3e46362bd68ee90744413cb8b7283da48b3e2 /src/tests | |
| parent | 74cab8d6b91168a4681f1c9c19a8e32052d59e7b (diff) | |
fix(3d): Unify SDF path for all objects and stabilize shadows
- Converted floor in test_3d_render to a large SDF BOX for consistent shading.
- Standardized lighting (light_dir = 1,1,1) and normal calculation for all objects.
- Fixed calc_shadow bias and skip_idx to reliably prevent self-shadowing.
- Improved raymarching robustness in fs_main to find exact SDF hit points.
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/test_3d_render.cc | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/src/tests/test_3d_render.cc b/src/tests/test_3d_render.cc index 11cca46..5b4593d 100644 --- a/src/tests/test_3d_render.cc +++ b/src/tests/test_3d_render.cc @@ -137,43 +137,42 @@ void setup_scene() { g_scene.clear(); srand(12345); // Fixed seed - // Large floor, use CUBE type - Object3D floor(ObjectType::CUBE); + // Large floor, use BOX type (SDF) for receiving shadows + Object3D floor(ObjectType::BOX); floor.position = vec3(0, -2.0f, 0); - floor.scale = vec3(50.0f, 0.5f, 50.0f); - floor.color = - vec4(0.9f, 0.9f, 0.9f, 1.0f); // Brighter white for better shadow contrast + floor.scale = vec3(25.0f, 0.2f, 25.0f); + floor.color = vec4(0.8f, 0.8f, 0.8f, 1.0f); g_scene.add_object(floor); - // Center object + // Large center Torus (SDF) Object3D center(ObjectType::TORUS); - center.position = vec3(0, 1.5f, 0); // Elevated - center.scale = vec3(1.5f, 1.5f, 1.5f); - center.color = vec4(1, 0, 0, 1); + center.position = vec3(0, 1.0f, 0); + center.scale = vec3(2.0f, 2.0f, 2.0f); + center.color = vec4(1, 0.2, 0.2, 1); g_scene.add_object(center); + // Moving Sphere (SDF) + Object3D sphere(ObjectType::SPHERE); + sphere.position = vec3(4.0f, 2.0f, 0); + sphere.scale = vec3(1.2f, 1.2f, 1.2f); + sphere.color = vec4(0.2, 1, 0.2, 1); + g_scene.add_object(sphere); + // Random objects - for (int i = 0; i < 30; ++i) { + for (int i = 0; i < 20; ++i) { ObjectType type = ObjectType::SPHERE; int r = rand() % 3; - if (r == 1) - type = ObjectType::TORUS; - if (r == 2) - type = ObjectType::BOX; + if (r == 1) type = ObjectType::TORUS; + if (r == 2) type = ObjectType::BOX; Object3D obj(type); float angle = (rand() % 360) * 0.01745f; - float dist = 4.0f + (rand() % 100) * 0.05f; - float height = 0.5f + (rand() % 100) * 0.04f; // Elevated - + float dist = 5.0f + (rand() % 100) * 0.08f; + float height = 0.5f + (rand() % 100) * 0.04f; obj.position = vec3(std::cos(angle) * dist, height, std::sin(angle) * dist); - - float s = 0.3f + (rand() % 100) * 0.005f; + float s = 0.4f + (rand() % 100) * 0.005f; obj.scale = vec3(s, s, s); - - obj.color = vec4((rand() % 100) / 100.0f, (rand() % 100) / 100.0f, - (rand() % 100) / 100.0f, 1.0f); - + obj.color = vec4((rand()%100)/100.0f, (rand()%100)/100.0f, (rand()%100)/100.0f, 1.0f); g_scene.add_object(obj); } } |
