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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-01-24 18:36:02 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-01-24 18:36:02 +0400
commit5c9d1ec080c959bfe06ac17c91d5324a3c9b7349 (patch)
treed0e9139f8d1b480c6e69c7eb2e6594d5bb457d14 /source
parent4d50d3ac43f6904a9c2ebb05d78a098df7350fa0 (diff)
fix for mesh-cache modifier deform-integration used with axis-flipping would fail.
Diffstat (limited to 'source')
-rw-r--r--source/blender/modifiers/intern/MOD_meshcache.c78
1 files changed, 42 insertions, 36 deletions
diff --git a/source/blender/modifiers/intern/MOD_meshcache.c b/source/blender/modifiers/intern/MOD_meshcache.c
index b111381eb9c..5e702a4eabc 100644
--- a/source/blender/modifiers/intern/MOD_meshcache.c
+++ b/source/blender/modifiers/intern/MOD_meshcache.c
@@ -202,38 +202,6 @@ static void meshcache_do(
/* -------------------------------------------------------------------- */
- /* Apply the transformation matrix (if needed) */
- if (UNLIKELY(err_str)) {
- modifier_setError(&mcmd->modifier, err_str);
- }
- else if (ok) {
- bool use_matrix = false;
- float mat[3][3];
- unit_m3(mat);
-
- if (mat3_from_axis_conversion(mcmd->forward_axis, mcmd->up_axis, 1, 2, mat)) {
- use_matrix = true;
- }
-
- if (mcmd->flip_axis) {
- float tmat[3][3];
- unit_m3(tmat);
- if (mcmd->flip_axis & (1 << 0)) tmat[0][0] = -1.0f;
- if (mcmd->flip_axis & (1 << 1)) tmat[1][1] = -1.0f;
- if (mcmd->flip_axis & (1 << 2)) tmat[2][2] = -1.0f;
- mul_m3_m3m3(mat, tmat, mat);
-
- use_matrix = true;
- }
-
- if (use_matrix) {
- int i;
- for (i = 0; i < numVerts; i++) {
- mul_m3_v3(mat, vertexCos[i]);
- }
- }
- }
-
/* tricky shape key integration (slow!) */
if (mcmd->deform_mode == MOD_MESHCACHE_DEFORM_INTEGRATE) {
Mesh *me = ob->data;
@@ -272,17 +240,55 @@ static void meshcache_do(
);
/* write the corrected locations back into the result */
- memcpy(use_factor ? vertexCos : vertexCos_Real, vertexCos_New, sizeof(*vertexCos) * numVerts);
+ memcpy(vertexCos, vertexCos_New, sizeof(*vertexCos) * numVerts);
MEM_freeN(vertexCos_Source);
MEM_freeN(vertexCos_New);
}
}
- if (vertexCos_Store) {
- if (ok && use_factor) {
- interp_vn_vn(*vertexCos_Real, *vertexCos_Store, mcmd->factor, numVerts * 3);
+ /* -------------------------------------------------------------------- */
+ /* Apply the transformation matrix (if needed) */
+ if (UNLIKELY(err_str)) {
+ modifier_setError(&mcmd->modifier, err_str);
+ }
+ else if (ok) {
+ bool use_matrix = false;
+ float mat[3][3];
+ unit_m3(mat);
+
+ if (mat3_from_axis_conversion(mcmd->forward_axis, mcmd->up_axis, 1, 2, mat)) {
+ use_matrix = true;
+ }
+
+ if (mcmd->flip_axis) {
+ float tmat[3][3];
+ unit_m3(tmat);
+ if (mcmd->flip_axis & (1 << 0)) tmat[0][0] = -1.0f;
+ if (mcmd->flip_axis & (1 << 1)) tmat[1][1] = -1.0f;
+ if (mcmd->flip_axis & (1 << 2)) tmat[2][2] = -1.0f;
+ mul_m3_m3m3(mat, tmat, mat);
+
+ use_matrix = true;
+ }
+
+ if (use_matrix) {
+ int i;
+ for (i = 0; i < numVerts; i++) {
+ mul_m3_v3(mat, vertexCos[i]);
+ }
+ }
+ }
+
+ if (vertexCos_Store) {
+ if (ok) {
+ if (use_factor) {
+ interp_vn_vn(*vertexCos_Real, *vertexCos_Store, mcmd->factor, numVerts * 3);
+ }
+ else {
+ memcpy(vertexCos_Real, vertexCos_Store, sizeof(*vertexCos_Store) * numVerts);
+ }
}
MEM_freeN(vertexCos_Store);