Commit: eb5cdcc9f9ad89c7a648a72825510138e445a287
Author: Bastien Montagne
Date:   Sun Aug 24 17:16:41 2014 +0200
Branches: temp_custom_loop_normals
https://developer.blender.org/rBeb5cdcc9f9ad89c7a648a72825510138e445a287

SetSplitNormal: Fix bad handling of object-level transforms

We need to compare poly normals in same space (target one, in this case)!

Issue reported by hd_ on BA, thanks!

===================================================================

M       source/blender/modifiers/intern/MOD_setsplitnormal.c

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_setsplitnormal.c 
b/source/blender/modifiers/intern/MOD_setsplitnormal.c
index bd385d7..0b05910 100644
--- a/source/blender/modifiers/intern/MOD_setsplitnormal.c
+++ b/source/blender/modifiers/intern/MOD_setsplitnormal.c
@@ -467,7 +467,7 @@ static void setSplitNormalModifier_do_loopnormal(
                /* And now, match all loops together, based on their respective 
faces' normals. */
                for (i = 0; i < num_loops; i++) {
                        const MLoop *ml = &mloop[i];
-                       const float (*pnor)[3] = (const float 
(*)[3])&polynors[loop_to_poly[i]];
+                       float pnor[3];
                        const int target_vidx = (int)cos[ml->v][0];
 
                        LinkNode *target_ml_lnk;
@@ -475,6 +475,10 @@ static void setSplitNormalModifier_do_loopnormal(
                        int target_lidx = -1;
                        const float fac = facs[i] = vfacs[ml->v];
 
+                       /* Move our poly normal in target space! */
+                       copy_v3_v3(pnor, polynors[loop_to_poly[i]]);
+                       BLI_space_transform_apply_normal(&loc2trgt, pnor);
+
                        if (target_vidx < 0) {
                                /* nos is calloc'ed, no need to zero_v3 here. */
                                continue;
@@ -482,7 +486,7 @@ static void setSplitNormalModifier_do_loopnormal(
 
                        for (target_ml_lnk = target_verts2loops[target_vidx]; 
target_ml_lnk; target_ml_lnk = target_ml_lnk->next) {
                                const int t_lidx = 
GET_INT_FROM_POINTER(target_ml_lnk->link);
-                               const float t_dot = dot_v3v3(*pnor, 
target_polynors[target_loop_to_poly[t_lidx]]);
+                               const float t_dot = dot_v3v3(pnor, 
target_polynors[target_loop_to_poly[t_lidx]]);
 
                                if (t_dot > target_ml_best_dot) {
                                        target_ml_best_dot = t_dot;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to