star-3d

Surface structuring for efficient 3D geometric queries
git clone git://git.meso-star.fr/star-3d.git
Log | Files | Refs | README | LICENSE

commit 72f1dc3257b802d92be9670f0439ef78c1c43594
parent 21d12e901b3176357819bb80633e2ae39865506c
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed, 31 Aug 2016 15:27:22 +0200

Add a trace ray instance test

Ensure that the returned normal attribute is expressed in world space

Diffstat:
Msrc/test_s3d_trace_ray_instance.c | 10++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/test_s3d_trace_ray_instance.c b/src/test_s3d_trace_ray_instance.c @@ -35,6 +35,7 @@ #include <rsys/float2.h> #include <rsys/float3.h> +#include <rsys/float33.h> static const float quad_verts[] = { -1.f, -1.f, 0.f, @@ -83,6 +84,7 @@ main(int argc, char** argv) struct s3d_vertex_data vdata; unsigned quad_id; unsigned quad_inst_id; + float transform[12]; float org[3]; float dir[3]; float range[2]; @@ -91,6 +93,9 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); CHECK(s3d_device_create(NULL, &allocator, 1, &dev), RES_OK); + f33_rotation_pitch(transform, (float)PI); + f3_splat(transform+9, 0); + vdata.type = S3D_FLOAT3; vdata.usage = S3D_POSITION; vdata.get = quad_get_pos; @@ -101,6 +106,7 @@ main(int argc, char** argv) CHECK(s3d_scene_create(dev, &scn), RES_OK); CHECK(s3d_scene_attach_shape(scn, quad), RES_OK); CHECK(s3d_scene_instantiate(scn, &quad_inst), RES_OK); + CHECK(s3d_instance_set_transform(quad_inst, transform), RES_OK); CHECK(s3d_scene_ref_put(scn), RES_OK); CHECK(s3d_scene_create(dev, &scn), RES_OK); @@ -120,13 +126,13 @@ main(int argc, char** argv) CHECK(s3d_scene_view_trace_ray(view[0], org, dir, range, NULL, &hit[0]), RES_OK); CHECK(s3d_scene_view_trace_ray(view[1], org, dir, range, NULL, &hit[1]), RES_OK); - CHECK(hit[0].prim.prim_id, 1); + CHECK(hit[0].prim.prim_id, 0); CHECK(hit[1].prim.prim_id, 1); CHECK(hit[0].prim.geom_id, quad_id); CHECK(hit[1].prim.geom_id, quad_id); CHECK(hit[0].prim.inst_id, quad_inst_id); CHECK(hit[1].prim.inst_id, S3D_INVALID_ID); - CHECK(f3_eq_eps(hit[0].normal, hit[1].normal, 1.e-6f), 1); + CHECK(f3_eq_eps(hit[0].normal, f3_minus(dir, hit[1].normal), 1.e-6f), 1); CHECK(f2_eq_eps(hit[0].uv, hit[1].uv, 1.e-6f), 1); CHECK(eq_epsf(hit[0].distance, hit[1].distance, 1.e-6f), 1);