Fix T77261: Multires creates spikes when subdividing ngons
The spikes were caused by non-initialized tangent matrix used during smoothing process. The reason tangent matrix was not initialized was because wrong usage of API: n-gons should pass corner of 0 to the matrix construction function. Corrected usage of the API and added assert() to help catching such kind of non-initialized issues easier.
This commit is contained in:
parent
e74f61b49a
commit
82cc21d5e4
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "BKE_multires.h"
|
||||
#include "BLI_math_vector.h"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
BLI_INLINE void BKE_multires_construct_tangent_matrix(float tangent_matrix[3][3],
|
||||
const float dPdu[3],
|
||||
|
@ -51,6 +52,9 @@ BLI_INLINE void BKE_multires_construct_tangent_matrix(float tangent_matrix[3][3]
|
|||
copy_v3_v3(tangent_matrix[1], dPdv);
|
||||
mul_v3_fl(tangent_matrix[0], -1.0f);
|
||||
}
|
||||
else {
|
||||
BLI_assert(!"Unhandled corner index");
|
||||
}
|
||||
cross_v3_v3v3(tangent_matrix[2], dPdu, dPdv);
|
||||
normalize_v3(tangent_matrix[0]);
|
||||
normalize_v3(tangent_matrix[1]);
|
||||
|
|
|
@ -1154,8 +1154,11 @@ static void reshape_subdiv_evaluate_limit_at_grid(
|
|||
dPdu,
|
||||
dPdv);
|
||||
|
||||
const int face_index = multires_reshape_grid_to_face_index(reshape_context,
|
||||
grid_coord->grid_index);
|
||||
const int corner = multires_reshape_grid_to_corner(reshape_context, grid_coord->grid_index);
|
||||
BKE_multires_construct_tangent_matrix(r_tangent_matrix, dPdu, dPdv, corner);
|
||||
multires_reshape_tangent_matrix_for_corner(
|
||||
reshape_context, face_index, corner, dPdu, dPdv, r_tangent_matrix);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
|
Loading…
Reference in New Issue