[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31919] trunk/blender/source/blender/ blenkernel/intern/anim.c: Fix for [#20350] particles are offset from emittor in dupli-objects

Janne Karhu jhkarh at gmail.com
Tue Sep 14 03:43:51 CEST 2010


Revision: 31919
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31919
Author:   jhk
Date:     2010-09-14 03:43:46 +0200 (Tue, 14 Sep 2010)

Log Message:
-----------
Fix for [#20350] particles are offset from emittor in dupli-objects

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/anim.c

Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c	2010-09-14 01:11:54 UTC (rev 31918)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c	2010-09-14 01:43:46 UTC (rev 31919)
@@ -1357,19 +1357,25 @@
 				VECCOPY(vec, obmat[3]);
 				obmat[3][0] = obmat[3][1] = obmat[3][2] = 0.0f;
 				
-				copy_m4_m4(mat, pamat);
+				/* Normal particles and cached hair live in global space so we need to
+				 * remove the real emitter's transformation before 2nd order duplication.
+				 */
+				if(par_space_mat)
+					mul_m4_m4m4(mat, pamat, psys->imat);
+				else
+					copy_m4_m4(mat, pamat);
 
 				mul_m4_m4m4(tmat, obmat, mat);
 				mul_mat3_m4_fl(tmat, size*scale);
 
-				if(part->draw & PART_DRAW_GLOBAL_OB)
-					VECADD(tmat[3], tmat[3], vec);
-
 				if(par_space_mat)
 					mul_m4_m4m4(mat, tmat, par_space_mat);
 				else
 					copy_m4_m4(mat, tmat);
 
+				if(part->draw & PART_DRAW_GLOBAL_OB)
+					VECADD(mat[3], mat[3], vec);
+
 				dob= new_dupli_object(lb, ob, mat, ob->lay, counter, OB_DUPLIPARTS, animated);
 				copy_m4_m4(dob->omat, oldobmat);
 				if(G.rendering)





More information about the Bf-blender-cvs mailing list