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:
authorMiika Hamalainen <blender@miikah.org>2013-08-01 16:09:12 +0400
committerMiika Hamalainen <blender@miikah.org>2013-08-01 16:09:12 +0400
commitceaec3c86ad57366639db8bc6ba5353e3680b22a (patch)
tree5ceb9858f192a7f676beadb13369487a3860ea63 /source/blender/blenkernel/intern/smoke.c
parent702bf77b3490a6c74cf43236c5795b19d042f11b (diff)
Fix [#36265]: Smoke doesn't work if domain object has negative scale.
Diffstat (limited to 'source/blender/blenkernel/intern/smoke.c')
-rw-r--r--source/blender/blenkernel/intern/smoke.c11
1 files changed, 7 insertions, 4 deletions
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;