[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44260] trunk/blender/source/blender/ blenkernel/intern/smoke.c: Smoke
Daniel Genrich
daniel.genrich at gmx.net
Sun Feb 19 21:05:14 CET 2012
Revision: 44260
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44260
Author: genscher
Date: 2012-02-19 20:05:01 +0000 (Sun, 19 Feb 2012)
Log Message:
-----------
Smoke
------
New: Child particles are used as emitter.
Based on the patch #30013 by Kai Kostack. Thank you!
Please do test this code!
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/smoke.c
Modified: trunk/blender/source/blender/blenkernel/intern/smoke.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/smoke.c 2012-02-19 19:32:41 UTC (rev 44259)
+++ trunk/blender/source/blender/blenkernel/intern/smoke.c 2012-02-19 20:05:01 UTC (rev 44260)
@@ -1008,6 +1008,7 @@
{
ParticleSimulationData sim;
ParticleSystem *psys = sfs->psys;
+ int totpart=psys->totpart, totchild;
int p = 0;
float *density = smoke_get_density(sds->fluid);
float *bigdensity = smoke_turbulence_get_density(sds->wt);
@@ -1043,25 +1044,51 @@
}
// mostly copied from particle code
- for(p=0; p<psys->totpart; p++)
+ if(psys->part->type==PART_HAIR)
{
+ /*
+ if(psys->childcache)
+ {
+ totchild = psys->totchildcache;
+ }
+ else
+ */
+
+ // TODO: PART_HAIR not supported whatsoever
+ totchild=0;
+ }
+ else
+ totchild=psys->totchild*psys->part->disp/100;
+
+ for(p=0; p<totpart+totchild; p++)
+ {
int cell[3];
size_t i = 0;
size_t index = 0;
int badcell = 0;
ParticleKey state;
- if(psys->particles[p].flag & (PARS_NO_DISP|PARS_UNEXIST))
- continue;
+ if(p < totpart)
+ {
+ if(psys->particles[p].flag & (PARS_NO_DISP|PARS_UNEXIST))
+ continue;
+ }
+ else
+ {
+ /* handle child particle */
+ ChildParticle *cpa = &psys->child[p - totpart];
+
+ if(psys->particles[cpa->parent].flag & (PARS_NO_DISP|PARS_UNEXIST))
+ continue;
+ }
state.time = smd->time;
-
if(psys_get_particle_state(&sim, p, &state, 0) == 0)
continue;
-
+
// copy_v3_v3(pos, pa->state.co);
- // mul_m4_v3(ob->imat, pos);
- // 1. get corresponding cell
+ // mul_m4_v3(ob->imat, pos);
+ // 1. get corresponding cell
get_cell(smd->domain->p0, smd->domain->res, smd->domain->dx, state.co, cell, 0);
// check if cell is valid (in the domain boundary)
for(i = 0; i < 3; i++)
More information about the Bf-blender-cvs
mailing list