Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Toenne <lukas.toenne@googlemail.com>2012-04-20 16:55:57 +0400
committerLukas Toenne <lukas.toenne@googlemail.com>2012-04-20 16:55:57 +0400
commit71ac500fc2bc675ab34b91759c0712854fe7ee8c (patch)
tree5fc42f62ed0e7b78ea4600a17d26cb2d7c87ca3b /source/blender/blenkernel/intern/anim.c
parent5874106ea7d9d6813b7f60027d3ee8febb98b8c7 (diff)
Fix for particle dupli group relative offsets. The relative transforms of objects in the instanced group were not scaled according to the particle size, which would be expected when rendering as 'Whole Group'. Requested by Francesco Siddi (fsiddi) over IRC.
Diffstat (limited to 'source/blender/blenkernel/intern/anim.c')
-rw-r--r--source/blender/blenkernel/intern/anim.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 55b3a3f3e42..b547fedebb5 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -1407,17 +1407,16 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *p
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++) {
+ copy_m4_m4(tmat, oblist[b]->obmat);
+ /* apply particle scale */
+ mul_mat3_m4_fl(tmat, size*scale);
+ mul_v3_fl(tmat[3], size*scale);
/* group dupli offset, should apply after everything else */
- if (!is_zero_v3(part->dup_group->dupli_ofs)) {
- copy_m4_m4(tmat, oblist[b]->obmat);
+ if (!is_zero_v3(part->dup_group->dupli_ofs))
sub_v3_v3v3(tmat[3], tmat[3], part->dup_group->dupli_ofs);
- mult_m4_m4m4(tmat, pamat, tmat);
- }
- else {
- mult_m4_m4m4(tmat, pamat, oblist[b]->obmat);
- }
+ /* individual particle transform */
+ mult_m4_m4m4(tmat, pamat, tmat);
- mul_mat3_m4_fl(tmat, size*scale);
if (par_space_mat)
mult_m4_m4m4(mat, par_space_mat, tmat);
else