[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38141] trunk/blender/source/blender/ blenkernel/intern/anim.c: Fix #27876: particles instancing a whole group didn't take group offset into account.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Jul 6 12:05:28 CEST 2011


Revision: 38141
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38141
Author:   blendix
Date:     2011-07-06 10:05:27 +0000 (Wed, 06 Jul 2011)
Log Message:
-----------
Fix #27876: particles instancing a whole group didn't take group offset into account.

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	2011-07-06 09:58:29 UTC (rev 38140)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c	2011-07-06 10:05:27 UTC (rev 38141)
@@ -719,12 +719,13 @@
 		/* note, if you check on layer here, render goes wrong... it still deforms verts and uses parent imat */
 		if(go->ob!=ob) {
 			
-			/* Group Dupli Offset, should apply after everything else */
-			if (group->dupli_ofs[0] || group->dupli_ofs[1] || group->dupli_ofs[2]) {
+			/* group dupli offset, should apply after everything else */
+			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);
-			} else {
+			}
+			else {
 				mul_m4_m4m4(mat, go->ob->obmat, ob->obmat);
 			}
 			
@@ -1395,7 +1396,17 @@
 
 			if(part->ren_as==PART_DRAW_GR && psys->part->draw & PART_DRAW_WHOLE_GR) {
 				for(go= part->dup_group->gobject.first, b=0; go; go= go->next, b++) {
-					mul_m4_m4m4(tmat, oblist[b]->obmat, pamat);
+
+					/* group dupli offset, should apply after everything else */
+					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);
+					}
+					else {
+						mul_m4_m4m4(tmat, oblist[b]->obmat, pamat);
+					}
+
 					mul_mat3_m4_fl(tmat, size*scale);
 					if(par_space_mat)
 						mul_m4_m4m4(mat, tmat, par_space_mat);




More information about the Bf-blender-cvs mailing list