From ceaec3c86ad57366639db8bc6ba5353e3680b22a Mon Sep 17 00:00:00 2001 From: Miika Hamalainen Date: Thu, 1 Aug 2013 12:09:12 +0000 Subject: Fix [#36265]: Smoke doesn't work if domain object has negative scale. --- source/blender/blenkernel/intern/smoke.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'source/blender/blenkernel/intern/smoke.c') diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index b2c0a45cbc4..789b0ec5823 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -259,7 +259,10 @@ static void smoke_set_domain_from_derivedmesh(SmokeDomainSettings *sds, Object * zero_v3_int(sds->base_res); copy_v3_v3(sds->cell_size, size); } - mul_v3_v3(size, ob->size); + /* apply object scale */ + for (i = 0; i < 3; i++) { + size[i] = fabs(size[i] * ob->size[i]); + } copy_v3_v3(sds->global_size, size); copy_v3_v3(sds->dp0, min); @@ -272,21 +275,21 @@ static void smoke_set_domain_from_derivedmesh(SmokeDomainSettings *sds, Object * /* define grid resolutions from longest domain side */ if (size[0] >= MAX2(size[1], size[2])) { scale = res / size[0]; - sds->scale = size[0] / ob->size[0]; + sds->scale = size[0] / fabs(ob->size[0]); sds->base_res[0] = res; sds->base_res[1] = (int)(size[1] * scale + 0.5f); sds->base_res[2] = (int)(size[2] * scale + 0.5f); } else if (size[1] >= MAX2(size[0], size[2])) { scale = res / size[1]; - sds->scale = size[1] / ob->size[1]; + sds->scale = size[1] / fabs(ob->size[1]); sds->base_res[0] = (int)(size[0] * scale + 0.5f); sds->base_res[1] = res; sds->base_res[2] = (int)(size[2] * scale + 0.5f); } else { scale = res / size[2]; - sds->scale = size[2] / ob->size[2]; + sds->scale = size[2] / fabs(ob->size[2]); sds->base_res[0] = (int)(size[0] * scale + 0.5f); sds->base_res[1] = (int)(size[1] * scale + 0.5f); sds->base_res[2] = res; -- cgit v1.2.3