diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-08-13 12:38:19 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-08-13 12:45:01 +0300 |
commit | 4cadccebfacfa8533ba06403960e8b1218da61f5 (patch) | |
tree | eed8e2f5d0c4dc08d6deebc00392bb1e03d9bc26 /source/blender/blenkernel/intern | |
parent | b9486c39bcd57098b2baf8fb5d69088768a88e35 (diff) |
Revert "Mesh: replace saacos with acosf for normal calculation"
This reverts commit 41e650981861c2f18ab0548e18851d1d761066ff.
This broke "CubeMaskFirst" test.
Any value even slightly outside the [-1.0..1.0] range
caused the result to be nan, which can happen when calculating
the dot-product between two unit length vectors.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/mesh_normals.cc | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/mesh_normals.cc b/source/blender/blenkernel/intern/mesh_normals.cc index aae50fa165e..9a761c6fa11 100644 --- a/source/blender/blenkernel/intern/mesh_normals.cc +++ b/source/blender/blenkernel/intern/mesh_normals.cc @@ -230,10 +230,8 @@ static void mesh_calc_normals_poly_and_vertex_accum_fn( copy_v3_v3(edvec_next, edvec_end); } - /* Calculate angle between the two poly edges incident on this vertex. - * NOTE: no need for #saacos here as the input has been sanitized, - * `nan` values in coordinates normalize to zero which works for `acosf`. */ - const float fac = acosf(-dot_v3v3(edvec_prev, edvec_next)); + /* Calculate angle between the two poly edges incident on this vertex. */ + const float fac = saacos(-dot_v3v3(edvec_prev, edvec_next)); const float vnor_add[3] = {pnor[0] * fac, pnor[1] * fac, pnor[2] * fac}; add_v3_v3_atomic(vnors[ml[i_curr].v], vnor_add); @@ -1158,11 +1156,9 @@ static void split_loop_nor_fan_do(LoopSplitTaskDataCommon *common_data, LoopSpli // printf("\thandling edge %d / loop %d\n", mlfan_curr->e, mlfan_curr_index); { - /* Code similar to #accumulate_vertex_normals_poly_v3. */ - /* Calculate angle between the two poly edges incident on this vertex. - * NOTE: no need for #saacos here as the input has been sanitized, - * `nan` values in coordinates normalize to zero which works for `acosf`. */ - const float fac = acosf(dot_v3v3(vec_curr, vec_prev)); + /* Code similar to accumulate_vertex_normals_poly_v3. */ + /* Calculate angle between the two poly edges incident on this vertex. */ + const float fac = saacos(dot_v3v3(vec_curr, vec_prev)); /* Accumulate */ madd_v3_v3fl(lnor, polynors[mpfan_curr_index], fac); |