diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-09-27 14:03:51 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-09-27 14:03:51 +0200 |
commit | ec62b8a3ee1d731387a440b4d2abb7961aa28322 (patch) | |
tree | 01afd6171fed57e3ac6d9fd729fab16d93c4ea6c | |
parent | d616c3ecd01506f307482be986e1710746242d93 (diff) | |
parent | 0156860ad59e8c0cd7497057bde31039a2fd4a07 (diff) | |
download | redot-engine-ec62b8a3ee1d731387a440b4d2abb7961aa28322.tar.gz |
Merge pull request #82436 from Rindbee/fix-axis-being-mixed-up
Fix axis getting mixed up when split leaf
-rw-r--r-- | core/math/bvh_split.inc | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/core/math/bvh_split.inc b/core/math/bvh_split.inc index 875abedb70..2c85a63575 100644 --- a/core/math/bvh_split.inc +++ b/core/math/bvh_split.inc @@ -20,8 +20,8 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u group_b[num_b++] = ind; // remove from a - group_a[0] = group_a[num_a - 1]; num_a--; + group_a[0] = group_a[num_a]; return; } @@ -30,15 +30,15 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u int order[POINT::AXIS_COUNT]; - order[0] = size.min_axis_index(); - order[POINT::AXIS_COUNT - 1] = size.max_axis_index(); + order[0] = size.max_axis_index(); // The longest axis. + order[POINT::AXIS_COUNT - 1] = size.min_axis_index(); // The shortest axis. static_assert(POINT::AXIS_COUNT <= 3, "BVH POINT::AXIS_COUNT has unexpected size"); if constexpr (POINT::AXIS_COUNT == 3) { order[1] = 3 - (order[0] + order[2]); } - // simplest case, split on the longest axis + // Simplest case, split on the longest axis. int split_axis = order[0]; for (int a = 0; a < num_a; a++) { uint32_t ind = group_a[a]; @@ -48,8 +48,8 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u group_b[num_b++] = ind; // remove from a - group_a[a] = group_a[num_a - 1]; num_a--; + group_a[a] = group_a[num_a]; // do this one again, as it has been replaced a--; @@ -67,7 +67,7 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u } num_b = 0; - // now calculate the best split + // Now calculate the best split. for (int axis = 1; axis < POINT::AXIS_COUNT; axis++) { split_axis = order[axis]; int count = 0; @@ -105,8 +105,8 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u group_b[num_b++] = ind; // remove from a - group_a[a] = group_a[num_a - 1]; num_a--; + group_a[a] = group_a[num_a]; // do this one again, as it has been replaced a--; @@ -123,8 +123,8 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u group_b[num_b++] = ind; // remove from a - group_a[0] = group_a[num_a - 1]; num_a--; + group_a[0] = group_a[num_a]; } // opposite problem! :) if (!num_a) { @@ -134,8 +134,8 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u group_a[num_a++] = ind; // remove from b - group_b[0] = group_b[num_b - 1]; num_b--; + group_b[0] = group_b[num_b]; } } |