Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenlib/intern/math_geom.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c
index dad2a2fc288..e0058091447 100644
--- a/source/blender/blenlib/intern/math_geom.c
+++ b/source/blender/blenlib/intern/math_geom.c
@@ -1384,16 +1384,14 @@ bool isect_ray_tri_watertight_v3(
const float cy = c_ky - sy * c_kz;
/* Calculate scaled barycentric coordinates. */
- float u = cx * by - cy * bx;
- int sign_mask = (float_as_int(u) & (int)0x80000000);
- float v = ax * cy - ay * cx;
- float w, det;
+ const float u = cx * by - cy * bx;
+ const float v = ax * cy - ay * cx;
+ const float w = bx * ay - by * ax;
+ float det;
- if (sign_mask != (float_as_int(v) & (int)0x80000000)) {
- return false;
- }
- w = bx * ay - by * ax;
- if (sign_mask != (float_as_int(w) & (int)0x80000000)) {
+ if ((u < 0.0f || v < 0.0f || w < 0.0f) &&
+ (u > 0.0f || v > 0.0f || w > 0.0f))
+ {
return false;
}
@@ -1406,8 +1404,9 @@ bool isect_ray_tri_watertight_v3(
/* Calculate scaled z-coordinates of vertices and use them to calculate
* the hit distance.
*/
+ const int sign_det = (float_as_int(det) & (int)0x80000000);
const float t = (u * a_kz + v * b_kz + w * c_kz) * sz;
- const float sign_t = xor_fl(t, sign_mask);
+ const float sign_t = xor_fl(t, sign_det);
if ((sign_t < 0.0f)
/* differ from Cycles, don't read r_lambda's original value
* otherwise we won't match any of the other intersect functions here...