Revision: 42670
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42670
Author:   blendix
Date:     2011-12-16 19:53:12 +0000 (Fri, 16 Dec 2011)
Log Message:
-----------
Math lib: matrix multiplication order fix for two functions that were
inconsistent with similar functions & math notation:

mul_m4_m4m4(R, B, A) => mult_m4_m4m4(R, A, B)
mul_m3_m3m4(R, B, A) => mult_m3_m3m4(R, A, B)

For branch maintainers, it should be relatively simple to fix things manually,
it's also possible run this script after merging to do automatic replacement:
http://www.pasteall.org/27459/python

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/anim.c
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/blenkernel/intern/camera.c
    trunk/blender/source/blender/blenkernel/intern/constraint.c
    trunk/blender/source/blender/blenkernel/intern/fcurve.c
    trunk/blender/source/blender/blenkernel/intern/lattice.c
    trunk/blender/source/blender/blenkernel/intern/mball.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/blenkernel/intern/tracking.c
    trunk/blender/source/blender/blenlib/BLI_math_matrix.h
    trunk/blender/source/blender/blenlib/intern/math_matrix.c
    trunk/blender/source/blender/blenlib/intern/math_rotation.c
    trunk/blender/source/blender/collada/AnimationExporter.cpp
    trunk/blender/source/blender/collada/AnimationImporter.cpp
    trunk/blender/source/blender/collada/ArmatureExporter.cpp
    trunk/blender/source/blender/collada/ArmatureImporter.cpp
    trunk/blender/source/blender/collada/DocumentImporter.cpp
    trunk/blender/source/blender/collada/TransformReader.cpp
    trunk/blender/source/blender/collada/TransformWriter.cpp
    trunk/blender/source/blender/collada/collada_utils.cpp
    trunk/blender/source/blender/editors/armature/editarmature.c
    trunk/blender/source/blender/editors/curve/editcurve.c
    trunk/blender/source/blender/editors/mesh/editmesh_lib.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/mesh/meshtools.c
    trunk/blender/source/blender/editors/object/object_constraint.c
    trunk/blender/source/blender/editors/object/object_hook.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
    trunk/blender/source/blender/editors/space_clip/tracking_ops.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/editors/space_view3d/space_view3d.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_fly.c
    trunk/blender/source/blender/editors/space_view3d/view3d_select.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/editors/transform/transform_manipulator.c
    trunk/blender/source/blender/gpu/intern/gpu_material.c
    trunk/blender/source/blender/ikplugin/intern/iksolver_plugin.c
    trunk/blender/source/blender/ikplugin/intern/itasc_plugin.cpp
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/modifiers/intern/MOD_array.c
    trunk/blender/source/blender/modifiers/intern/MOD_boolean_util.c
    trunk/blender/source/blender/modifiers/intern/MOD_cast.c
    trunk/blender/source/blender/modifiers/intern/MOD_hook.c
    trunk/blender/source/blender/modifiers/intern/MOD_meshdeform.c
    trunk/blender/source/blender/modifiers/intern/MOD_mirror.c
    trunk/blender/source/blender/modifiers/intern/MOD_screw.c
    trunk/blender/source/blender/modifiers/intern/MOD_uvproject.c
    trunk/blender/source/blender/modifiers/intern/MOD_warp.c
    trunk/blender/source/blender/modifiers/intern/MOD_wave.c
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/envmap.c
    trunk/blender/source/blender/render/intern/source/pointdensity.c
    trunk/blender/source/blender/render/intern/source/render_texture.c
    trunk/blender/source/blender/render/intern/source/shadbuf.c
    trunk/blender/source/blender/render/intern/source/shadeinput.c
    trunk/blender/source/blender/render/intern/source/strand.c
    trunk/blender/source/blender/render/intern/source/volumetric.c
    trunk/blender/source/blender/render/intern/source/zbuf.c
    trunk/blender/source/gameengine/Converter/BL_ArmatureChannel.cpp

Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c       2011-12-16 
18:15:07 UTC (rev 42669)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c       2011-12-16 
19:53:12 UTC (rev 42670)
@@ -726,10 +726,10 @@
                        if(!is_zero_v3(group->dupli_ofs)) {
                                copy_m4_m4(tmat, go->ob->obmat);
                                sub_v3_v3v3(tmat[3], tmat[3], group->dupli_ofs);
-                               mul_m4_m4m4(mat, tmat, ob->obmat);
+                               mult_m4_m4m4(mat, ob->obmat, tmat);
                        }
                        else {
-                               mul_m4_m4m4(mat, go->ob->obmat, ob->obmat);
+                               mult_m4_m4m4(mat, ob->obmat, go->ob->obmat);
                        }
                        
                        dob= new_dupli_object(lb, go->ob, mat, ob->lay, 0, 
OB_DUPLIGROUP, animated);
@@ -955,7 +955,7 @@
                                           when par_space_mat is NULL ob->obmat 
can be used instead of ob__obmat
                                        */
                                        if(par_space_mat)
-                                               mul_m4_m4m4(vdd.obmat, 
ob->obmat, par_space_mat);
+                                               mult_m4_m4m4(vdd.obmat, 
par_space_mat, ob->obmat);
                                        else
                                                copy_m4_m4(vdd.obmat, 
ob->obmat);
 
@@ -1084,7 +1084,7 @@
                                           when par_space_mat is NULL ob->obmat 
can be used instead of ob__obmat
                                        */
                                        if(par_space_mat)
-                                               mul_m4_m4m4(ob__obmat, 
ob->obmat, par_space_mat);
+                                               mult_m4_m4m4(ob__obmat, 
par_space_mat, ob->obmat);
                                        else
                                                copy_m4_m4(ob__obmat, 
ob->obmat);
                                        
@@ -1396,15 +1396,15 @@
                                        
if(!is_zero_v3(part->dup_group->dupli_ofs)) {
                                                copy_m4_m4(tmat, 
oblist[b]->obmat);
                                                sub_v3_v3v3(tmat[3], tmat[3], 
part->dup_group->dupli_ofs);
-                                               mul_m4_m4m4(tmat, tmat, pamat);
+                                               mult_m4_m4m4(tmat, pamat, tmat);
                                        }
                                        else {
-                                               mul_m4_m4m4(tmat, 
oblist[b]->obmat, pamat);
+                                               mult_m4_m4m4(tmat, pamat, 
oblist[b]->obmat);
                                        }
 
                                        mul_mat3_m4_fl(tmat, size*scale);
                                        if(par_space_mat)
-                                               mul_m4_m4m4(mat, tmat, 
par_space_mat);
+                                               mult_m4_m4m4(mat, 
par_space_mat, tmat);
                                        else
                                                copy_m4_m4(mat, tmat);
 
@@ -1435,15 +1435,15 @@
                                 * remove the real emitter's transformation 
before 2nd order duplication.
                                 */
                                if(par_space_mat && GS(id->name) != ID_GR)
-                                       mul_m4_m4m4(mat, pamat, psys->imat);
+                                       mult_m4_m4m4(mat, psys->imat, pamat);
                                else
                                        copy_m4_m4(mat, pamat);
 
-                               mul_m4_m4m4(tmat, obmat, mat);
+                               mult_m4_m4m4(tmat, mat, obmat);
                                mul_mat3_m4_fl(tmat, size*scale);
 
                                if(par_space_mat)
-                                       mul_m4_m4m4(mat, tmat, par_space_mat);
+                                       mult_m4_m4m4(mat, par_space_mat, tmat);
                                else
                                        copy_m4_m4(mat, tmat);
 

Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c   2011-12-16 
18:15:07 UTC (rev 42669)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c   2011-12-16 
19:53:12 UTC (rev 42670)
@@ -505,9 +505,9 @@
                if(prev->bone->segments==1) {
                        /* find the previous roll to interpolate */
                        if(rest)
-                               mul_m4_m4m4(difmat, prev->bone->arm_mat, imat);
+                               mult_m4_m4m4(difmat, imat, prev->bone->arm_mat);
                        else
-                               mul_m4_m4m4(difmat, prev->pose_mat, imat);
+                               mult_m4_m4m4(difmat, imat, prev->pose_mat);
                        copy_m3_m4(result, difmat);                             
// the desired rotation at beginning of next bone
                        
                        vec_roll_to_mat3(h1, 0.0f, mat3);                       
// the result of vec_roll without roll
@@ -538,9 +538,9 @@
                
                /* find the next roll to interpolate as well */
                if(rest)
-                       mul_m4_m4m4(difmat, next->bone->arm_mat, imat);
+                       mult_m4_m4m4(difmat, imat, next->bone->arm_mat);
                else
-                       mul_m4_m4m4(difmat, next->pose_mat, imat);
+                       mult_m4_m4m4(difmat, imat, next->pose_mat);
                copy_m3_m4(result, difmat);                             // the 
desired rotation at beginning of next bone
                
                vec_roll_to_mat3(h2, 0.0f, mat3);                       // the 
result of vec_roll without roll
@@ -837,7 +837,7 @@
        
        invert_m4_m4(obinv, target->obmat);
        copy_m4_m4(premat, target->obmat);
-       mul_m4_m4m4(postmat, armOb->obmat, obinv);
+       mult_m4_m4m4(postmat, obinv, armOb->obmat);
        invert_m4_m4(premat, postmat);
 
        /* bone defmats are already in the channels, chan_mat */
@@ -1103,7 +1103,7 @@
        invert_m4_m4(obmat, ob->obmat);
        
        /* multiply given matrix by object's-inverse to find pose-space matrix 
*/
-       mul_m4_m4m4(outmat, obmat, inmat);
+       mult_m4_m4m4(outmat, inmat, obmat);
 }
 
 /* Convert Wolrd-Space Location to Pose-Space Location
@@ -1174,7 +1174,7 @@
         * This should leave behind the effects of restpose + 
         * parenting + constraints
         */
-       mul_m4_m4m4(pc_posemat, inv_trans, pose_mat);
+       mult_m4_m4m4(pc_posemat, pose_mat, inv_trans);
        
        /* get the inverse of the leftovers so that we can remove 
         * that component from the supplied matrix
@@ -1182,7 +1182,7 @@
        invert_m4_m4(inv_posemat, pc_posemat);
        
        /* get the new matrix */
-       mul_m4_m4m4(outmat, inmat, inv_posemat);
+       mult_m4_m4m4(outmat, inv_posemat, inmat);
 }
 
 /* Convert Pose-Space Location to Bone-Space Location
@@ -1237,7 +1237,7 @@
        float imat[4][4];
        
        invert_m4_m4(imat, arm_mat);
-       mul_m4_m4m4(delta_mat, pose_mat, imat);
+       mult_m4_m4m4(delta_mat, imat, pose_mat);
 }
 
 /* **************** Rotation Mode Conversions ****************************** */
@@ -1410,7 +1410,7 @@
                offs_bone[3][1]+= prevbone->length;
                
                /* Compose the matrix for this bone  */
-               mul_m4_m4m4(bone->arm_mat, offs_bone, prevbone->arm_mat);
+               mult_m4_m4m4(bone->arm_mat, prevbone->arm_mat, offs_bone);
        }
        else {
                copy_m4_m3(bone->arm_mat, bone->bone_mat);
@@ -2310,7 +2310,7 @@
                        /* extract the scale of the parent matrix */
                        mat4_to_size(tscale, parchan->pose_mat);
                        size_to_mat4(tsmat, tscale);
-                       mul_m4_m4m4(tmat, tmat, tsmat);
+                       mult_m4_m4m4(tmat, tsmat, tmat);
 
                        mul_serie_m4(pchan->pose_mat, tmat, offs_bone, 
pchan->chan_mat, NULL, NULL, NULL, NULL, NULL);
                }
@@ -2344,7 +2344,7 @@
                }
        }
        else {
-               mul_m4_m4m4(pchan->pose_mat, pchan->chan_mat, bone->arm_mat);
+               mult_m4_m4m4(pchan->pose_mat, bone->arm_mat, pchan->chan_mat);
 
                /* optional location without arm_mat rotation */
                if(bone->flag & BONE_NO_LOCAL_LOCATION)
@@ -2466,7 +2466,7 @@
        for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
                if(pchan->bone) {
                        invert_m4_m4(imat, pchan->bone->arm_mat);
-                       mul_m4_m4m4(pchan->chan_mat, imat, pchan->pose_mat);
+                       mult_m4_m4m4(pchan->chan_mat, pchan->pose_mat, imat);
                }
        }
 }

Modified: trunk/blender/source/blender/blenkernel/intern/camera.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/camera.c     2011-12-16 
18:15:07 UTC (rev 42669)
+++ trunk/blender/source/blender/blenkernel/intern/camera.c     2011-12-16 
19:53:12 UTC (rev 42670)
@@ -159,7 +159,7 @@
                copy_m4_m4(obmat, ob->obmat);
                normalize_m4(obmat);
                invert_m4_m4(imat, obmat);
-               mul_m4_m4m4(mat, cam->dof_ob->obmat, imat);
+               mult_m4_m4m4(mat, imat, cam->dof_ob->obmat);
                return fabsf(mat[3][2]);
        }
        return cam->YF_dofdist;

Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c 2011-12-16 
18:15:07 UTC (rev 42669)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c 2011-12-16 
19:53:12 UTC (rev 42670)
@@ -153,7 +153,7 @@
                                }
                                
                                /* matrix in world-space */
-                               mul_m4_m4m4(cob->matrix, cob->pchan->pose_mat, 
ob->obmat);
+                               mult_m4_m4m4(cob->matrix, ob->obmat, 
cob->pchan->pose_mat);
                        }
                        else
                                unit_m4(cob->matrix);
@@ -182,7 +182,7 @@
        
        /* calculate delta of constraints evaluation */
        invert_m4_m4(imat, cob->startmat);
-       mul_m4_m4m4(delta, imat, cob->matrix);
+       mult_m4_m4m4(delta, cob->matrix, imat);
        
        /* copy matrices back to source */
        switch (cob->type) {
@@ -203,7 +203,7 @@
                        /* cob->ob or cob->pchan might not exist */
                        if (cob->ob && cob->pchan) {
                                /* copy new pose-matrix back to owner */
-                               mul_m4_m4m4(cob->pchan->pose_mat, cob->matrix, 
cob->ob->imat);
+                               mult_m4_m4m4(cob->pchan->pose_mat, 
cob->ob->imat, cob->matrix);
                                
                                /* copy inverse of delta back to owner */
                                invert_m4_m4(cob->pchan->constinv, delta);
@@ -242,7 +242,7 @@
                                /* world to pose */
                                invert_m4_m4(imat, ob->obmat);
                                copy_m4_m4(tempmat, mat);
-                               mul_m4_m4m4(mat, tempmat, imat);
+                               mult_m4_m4m4(mat, imat, tempmat);
                                
                                /* use pose-space as stepping stone for other 
spaces... */
                                if (ELEM(to, CONSTRAINT_SPACE_LOCAL, 
CONSTRAINT_SPACE_PARLOCAL)) {
@@ -256,7 +256,7 @@
                                /* pose to world */
                                if (to == CONSTRAINT_SPACE_WORLD) {
                                        copy_m4_m4(tempmat, mat);
-                                       mul_m4_m4m4(mat, tempmat, ob->obmat);
+                                       mult_m4_m4m4(mat, ob->obmat, tempmat);
                                }
                                /* pose to local */
                                else if (to == CONSTRAINT_SPACE_LOCAL) {
@@ -281,12 +281,12 @@
                                                                
offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f;
                                                                
mul_m4_v3(pchan->parent->pose_mat, tmat[3]);
                                                                
-                                                               
mul_m4_m4m4(diff_mat, offs_bone, tmat);
+                                                               
mult_m4_m4m4(diff_mat, tmat, offs_bone);
                                                                
invert_m4_m4(imat, diff_mat);
                                                        }
                                                        else {
                                                                /* pose_mat = 
par_pose_mat * bone_mat * chan_mat */
-                                                               
mul_m4_m4m4(diff_mat, offs_bone, pchan->parent->pose_mat);
+                                                               
mult_m4_m4m4(diff_mat, pchan->parent->pose_mat, offs_bone);
                                                                
invert_m4_m4(imat, diff_mat);
                                                        }
                                                }
@@ -296,7 +296,7 @@
                                                }
                                                
                                                copy_m4_m4(tempmat, mat);
-                                               mul_m4_m4m4(mat, tempmat, imat);
+                                               mult_m4_m4m4(mat, imat, 
tempmat);
                                        }
                                }
                                /* pose to local with parent */
@@ -304,7 +304,7 @@
                                        if (pchan->bone) {
                                                invert_m4_m4(imat, 
pchan->bone->arm_mat);
                                                copy_m4_m4(tempmat, mat);
-                                               mul_m4_m4m4(mat, tempmat, imat);
+                                               mult_m4_m4m4(mat, imat, 
tempmat);
                                        }
                                }
                        }
@@ -334,22 +334,22 @@
                                                        zero_v3(offs_bone[3]);
                                                        
mul_m4_v3(pchan->parent->pose_mat, tmat[3]);
                                                        
-                                                       mul_m4_m4m4(diff_mat, 
offs_bone, tmat);
+                                                       mult_m4_m4m4(diff_mat, 
tmat, offs_bone);
                                                        copy_m4_m4(tempmat, 
mat);
-                                                       mul_m4_m4m4(mat, 
tempmat, diff_mat);
+                                                       mult_m4_m4m4(mat, 
diff_mat, tempmat);
                                                }
                                                else {
                                                        /* pose_mat = 
par_pose_mat * bone_mat * chan_mat */
-                                                       mul_m4_m4m4(diff_mat, 
offs_bone, pchan->parent->pose_mat);
+                                                       mult_m4_m4m4(diff_mat, 
pchan->parent->pose_mat, offs_bone);
                                                        copy_m4_m4(tempmat, 
mat);
-                                                       mul_m4_m4m4(mat, 
tempmat, diff_mat);
+                                                       mult_m4_m4m4(mat, 
diff_mat, tempmat);
                                                }
                                        }
                                        else {
                                                copy_m4_m4(diff_mat, 
pchan->bone->arm_mat);
                                                

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to