Alembic: more lenient check on absence of sheer & homogeneous scaling
authorSybren A. Stüvel <sybren@stuvel.eu>
Tue, 28 Feb 2017 15:42:25 +0000 (16:42 +0100)
committerSybren A. Stüvel <sybren@stuvel.eu>
Thu, 6 Apr 2017 14:04:31 +0000 (16:04 +0200)
Checking precise values of floats is not a good idea.

source/blender/alembic/intern/abc_util.cc

index 194f4c276d1c20acdb573f6ef31201d3d5eb32cc..2274a50ad7d97180db89abd084f6fab9b0400fd9 100644 (file)
@@ -178,10 +178,10 @@ void copy_m44_axis_swap(float dst_mat[4][4], float src_mat[4][4], AbcAxisSwapMod
        unit_m4(dst_scale_mat);
 
        /* We assume there is no sheer component and no homogeneous scaling component. */
-       BLI_assert(src_mat[0][3] == 0.0);
-       BLI_assert(src_mat[1][3] == 0.0);
-       BLI_assert(src_mat[2][3] == 0.0);
-       BLI_assert(src_mat[3][3] == 1.0);
+       BLI_assert(fabs(src_mat[0][3]) < 2 * FLT_EPSILON);
+       BLI_assert(fabs(src_mat[1][3]) < 2 * FLT_EPSILON);
+       BLI_assert(fabs(src_mat[2][3]) < 2 * FLT_EPSILON);
+       BLI_assert(fabs(src_mat[3][3] - 1.0f) < 2 * FLT_EPSILON);
 
        /* Extract translation, rotation, and scale form matrix. */
        mat4_to_loc_rot_size(src_trans, src_rot, src_scale, src_mat);