139
140
invert_m4_m4(ob->imat, ob->obmat);
141
142
total_particles = psys->totpart+psys->totchild;
142
psys->lattice=psys_get_lattice(&sim);
143
psys->lattice_deform_data = psys_create_lattice_deform_data(&sim);
144
145
pd->point_tree = BLI_bvhtree_new(total_particles, 0.0, 4, 6);
145
146
alloc_point_data(pd, total_particles, data_used);
154
155
for (i=0, pa=psys->particles; i < total_particles; i++, pa++) {
157
if (psys_get_particle_state(&sim, i, &state, 0)) {
159
copy_v3_v3(partco, state.co);
161
if (pd->psys_cache_space == TEX_PD_OBJECTSPACE)
162
mul_m4_v3(ob->imat, partco);
163
else if (pd->psys_cache_space == TEX_PD_OBJECTLOC) {
164
sub_v3_v3(partco, ob->loc);
167
/* TEX_PD_WORLDSPACE */
170
BLI_bvhtree_insert(pd->point_tree, i, partco, 1);
172
if (data_used & POINT_DATA_VEL) {
173
pd->point_data[i*3 + 0] = state.vel[0];
174
pd->point_data[i*3 + 1] = state.vel[1];
175
pd->point_data[i*3 + 2] = state.vel[2];
157
if (psys->part->type == PART_HAIR) {
159
if (i < psys->totpart && psys->pathcache)
160
cache = psys->pathcache[i];
161
else if (i >= psys->totpart && psys->childcache)
162
cache = psys->childcache[i - psys->totpart];
166
cache += cache->steps; /* use endpoint */
168
copy_v3_v3(state.co, cache->co);
173
/* emitter particles */
176
if (!psys_get_particle_state(&sim, i, &state, 0))
177
179
if (data_used & POINT_DATA_LIFE) {
180
180
if (i < psys->totpart) {
181
pa_time = (cfra - pa->time)/pa->lifetime;
181
state.time = (cfra - pa->time)/pa->lifetime;
184
184
ChildParticle *cpa= (psys->child + i) - psys->totpart;
185
185
float pa_birthtime, pa_dietime;
187
pa_time = psys_get_child_time(psys, cpa, cfra, &pa_birthtime, &pa_dietime);
187
state.time = psys_get_child_time(psys, cpa, cfra, &pa_birthtime, &pa_dietime);
190
pd->point_data[offset + i] = pa_time;
192
copy_v3_v3(partco, state.co);
194
if (pd->psys_cache_space == TEX_PD_OBJECTSPACE)
195
mul_m4_v3(ob->imat, partco);
196
else if (pd->psys_cache_space == TEX_PD_OBJECTLOC) {
197
sub_v3_v3(partco, ob->loc);
200
/* TEX_PD_WORLDSPACE */
203
BLI_bvhtree_insert(pd->point_tree, i, partco, 1);
205
if (data_used & POINT_DATA_VEL) {
206
pd->point_data[i*3 + 0] = state.vel[0];
207
pd->point_data[i*3 + 1] = state.vel[1];
208
pd->point_data[i*3 + 2] = state.vel[2];
210
if (data_used & POINT_DATA_LIFE) {
211
pd->point_data[offset + i] = state.time;
196
215
BLI_bvhtree_balance(pd->point_tree);
200
end_latt_deform(psys->lattice);
218
if (psys->lattice_deform_data) {
219
end_latt_deform(psys->lattice_deform_data);
220
psys->lattice_deform_data = NULL;
204
223
psys_render_restore(ob, psys);