[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42670] trunk/blender/source: Math lib: matrix multiplication order fix for two functions that were

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Dec 16 20:53:20 CET 2011


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. @@



More information about the Bf-blender-cvs mailing list