From 446439dc252f847dd4919b35495e5ba6c56316ee Mon Sep 17 00:00:00 2001 From: Sebastian Achim Mueller Date: Thu, 6 Jun 2024 10:27:36 +0200 Subject: [PATCH] fix ray grid traversal, fix ray aabb intersection. --- libs/mli/src/mliRay.test.c | 27 +++++++++++++++++++++++++++ libs/mli/src/mliRay_AABB.c | 5 +---- libs/mli/src/mli_ray_grid_traversal.c | 4 ++-- libs/mli/src/mli_version.h | 2 +- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/libs/mli/src/mliRay.test.c b/libs/mli/src/mliRay.test.c index 0db27cb..916d923 100644 --- a/libs/mli/src/mliRay.test.c +++ b/libs/mli/src/mliRay.test.c @@ -116,6 +116,33 @@ CASE("ray inside aabb") } } +CASE("ray aabb actual test cases") +{ + struct mliAABB aabb; + /*struct mliVec aabbextent;*/ + struct mliRay ray; + /*struct mliVec vn, vf;*/ + double near, far; + aabb.lower = mliVec_init(-5124735.0, -5120543.0, -5000.0); + aabb.upper = mliVec_init(5115265.0, 5119457.0, 5000.0); + /*aabbextent = mliVec_substract(aabb.upper, aabb.lower);*/ + ray = mliRay_set( + mliVec_init(-15220843.0, -16454620.0, 0.0), + mliVec_init(0.678895, 0.734165, 0.010214)); + + mliRay_aabb_intersections(ray, aabb, &near, &far); + CHECK(!mliRay_aabb_intersections_is_valid_given_near_and_far( + near, far)); + /* + vn = mliRay_at(&ray, near); + vf = mliRay_at(&ray, far); + fprintf(stderr, "n:%e, f:%e\n", near, far); + fprintf(stderr, "vn:(%f, %f, %f), vf:(%f, %f, %f)\n", + vn.x/aabbextent.x, vn.y/aabbextent.y, vn.z/aabbextent.z, + vf.x/aabbextent.x, vf.y/aabbextent.y, vf.z/aabbextent.z); + */ +} + CASE("mliHomTraComp, transform direction") { struct mliHomTraComp Tcomp; diff --git a/libs/mli/src/mliRay_AABB.c b/libs/mli/src/mliRay_AABB.c index 55847e2..94dc283 100644 --- a/libs/mli/src/mliRay_AABB.c +++ b/libs/mli/src/mliRay_AABB.c @@ -43,12 +43,9 @@ int mliRay_aabb_intersections_is_valid_given_near_and_far( if (t_far < 0) { return 0; } - - /* if t_near > t_far, ray doesn't intersect AABB */ if (t_near > t_far) { - return 1; + return 0; } - return 1; } diff --git a/libs/mli/src/mli_ray_grid_traversal.c b/libs/mli/src/mli_ray_grid_traversal.c index 68d2fce..1f28de1 100644 --- a/libs/mli/src/mli_ray_grid_traversal.c +++ b/libs/mli/src/mli_ray_grid_traversal.c @@ -77,8 +77,8 @@ int mliAxisAlignedGrid_find_voxel_of_first_interaction( mliRay_aabb_intersections_is_valid_given_near_and_far( ray_parameter_near, ray_parameter_far); if (has_intersection) { - struct mliVec inner = - mliRay_at(ray, ray_parameter_near); + struct mliVec inner; + inner = mliRay_at(ray, ray_parameter_near); (*bin) = mliAxisAlignedGrid_get_voxel_idx(grid, inner); if (bin->x >= grid->num_bins.x) { diff --git a/libs/mli/src/mli_version.h b/libs/mli/src/mli_version.h index 11f55d2..fb5347c 100644 --- a/libs/mli/src/mli_version.h +++ b/libs/mli/src/mli_version.h @@ -6,7 +6,7 @@ #define MLI_VERSION_MAYOR 1 #define MLI_VERSION_MINOR 9 -#define MLI_VERSION_PATCH 8 +#define MLI_VERSION_PATCH 9 void mli_logo_fprint(FILE *f); void mli_authors_and_affiliations_fprint(FILE *f);