summaryrefslogtreecommitdiff
path: root/src/tests/test_3d_render.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-02 16:25:01 +0100
committerskal <pascal.massimino@gmail.com>2026-02-02 16:25:01 +0100
commit5dbdb0a359d51355e4031d2e5dd576796f422d0a (patch)
tree394c29965f8dd150edd1c338e43e59a963aa5b96 /src/tests/test_3d_render.cc
parent47b6253049b54186663b4205d3441f88656dc22e (diff)
fix(3d): Resolve missing shadows on floor plane
- Switched floor from rasterized CUBE to SDF PLANE for consistent shadow mapping. - Implemented skip_idx in map_scene to properly prevent self-shadowing. - Standardized soft shadow logic with improved bias and step size. - Increased object elevation and adjusted light direction for more visible shadows. - Enabled debug boxes in test_3d_render.
Diffstat (limited to 'src/tests/test_3d_render.cc')
-rw-r--r--src/tests/test_3d_render.cc20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/tests/test_3d_render.cc b/src/tests/test_3d_render.cc
index 3084edc..141b1b7 100644
--- a/src/tests/test_3d_render.cc
+++ b/src/tests/test_3d_render.cc
@@ -137,18 +137,18 @@ void setup_scene() {
g_scene.clear();
srand(12345); // Fixed seed
- // Large floor, use CUBE type to exclude from SDF calculations
- Object3D floor(ObjectType::CUBE);
+ // Large floor, use PLANE type
+ Object3D floor(ObjectType::PLANE);
floor.position = vec3(0, -2.0f, 0);
- floor.scale = vec3(20.0f, 0.5f, 20.0f);
+ floor.scale = vec3(100.0f, 1.0f, 100.0f);
floor.color =
vec4(0.9f, 0.9f, 0.9f, 1.0f); // Brighter white for better shadow contrast
g_scene.add_object(floor);
// Center object
Object3D center(ObjectType::TORUS);
- center.position = vec3(0, 0, 0);
- center.scale = vec3(1.5f, 1.5f, 1.5f);
+ center.position = vec3(0, 1.0f, 0); // Higher
+ center.scale = vec3(2.5f, 2.5f, 2.5f); // Larger
center.color = vec4(1, 0, 0, 1);
g_scene.add_object(center);
@@ -163,12 +163,12 @@ void setup_scene() {
Object3D obj(type);
float angle = (rand() % 360) * 0.01745f;
- float dist = 3.0f + (rand() % 100) * 0.05f;
- float height = -1.0f + (rand() % 100) * 0.04f;
+ float dist = 4.0f + (rand() % 100) * 0.06f;
+ float height = 0.5f + (rand() % 100) * 0.04f; // Higher
obj.position = vec3(std::cos(angle) * dist, height, std::sin(angle) * dist);
- float s = 0.3f + (rand() % 100) * 0.005f;
+ float s = 0.5f + (rand() % 100) * 0.005f;
obj.scale = vec3(s, s, s);
obj.color = vec4((rand() % 100) / 100.0f, (rand() % 100) / 100.0f,
@@ -242,6 +242,10 @@ int main(int argc, char** argv) {
g_scene.objects[i].position.y = std::sin(time * 3.0f + i) * 1.5f;
}
+#if !defined(STRIP_ALL)
+ Renderer3D::SetDebugEnabled(true);
+#endif
+
WGPUSurfaceTexture surface_tex;
wgpuSurfaceGetCurrentTexture(g_surface, &surface_tex);
if (surface_tex.status ==