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:
authorTon Roosendaal <ton@blender.org>2005-12-11 17:28:22 +0300
committerTon Roosendaal <ton@blender.org>2005-12-11 17:28:22 +0300
commitd3113b51841486f24a22e257d803dac77132e040 (patch)
tree67db338df65d8adeb0a12bbf8fa8a468bd427fad /source/blender/renderconverter/intern/convertBlenderScene.c
parentfeb14b9b663f38e74db9c99fbeec8e3ccf68e4c1 (diff)
Orange: made duplicators work for dynamic particle systems. Meaning; a
particle generator can be duplicated. Note that the particles are only generated once, on the original, and just get duplicated. For static particles it worked already OK. Added note for previous grouping commit; group-duplicators should support fully all animation systems, including modifiers and particles.
Diffstat (limited to 'source/blender/renderconverter/intern/convertBlenderScene.c')
-rw-r--r--source/blender/renderconverter/intern/convertBlenderScene.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c
index 4bef6f890d0..0f200a9e0e1 100644
--- a/source/blender/renderconverter/intern/convertBlenderScene.c
+++ b/source/blender/renderconverter/intern/convertBlenderScene.c
@@ -889,7 +889,7 @@ static void render_particle_system(Object *ob, PartEff *paf)
Particle *pa=0;
HaloRen *har=0;
Material *ma=0;
- float xn, yn, zn, imat[3][3], mat[4][4], hasize, stime, ptime, ctime, vec[3], vec1[3], view[3], nor[3];
+ float xn, yn, zn, imat[3][3], tmat[4][4], mat[4][4], hasize, stime, ptime, ctime, vec[3], vec1[3], view[3], nor[3];
int a, mat_nr=1, seed;
pa= paf->keys;
@@ -900,12 +900,16 @@ static void render_particle_system(Object *ob, PartEff *paf)
}
ma= give_render_material(ob, paf->omat);
-
+
MTC_Mat4MulMat4(mat, ob->obmat, R.viewmat);
MTC_Mat4Invert(ob->imat, mat); /* this is correct, for imat texture */
- MTC_Mat4Invert(mat, R.viewmat); /* particles do not have a ob transform anymore */
- MTC_Mat3CpyMat4(imat, mat);
+ /* enable duplicators to work */
+ Mat4MulMat4(tmat, paf->imat, ob->obmat);
+ MTC_Mat4MulMat4(mat, tmat, R.viewmat);
+
+ MTC_Mat4Invert(tmat, mat);
+ MTC_Mat3CpyMat4(imat, tmat);
R.flag |= R_HALO;
@@ -935,13 +939,13 @@ static void render_particle_system(Object *ob, PartEff *paf)
/* watch it: also calculate the normal of a particle */
if(paf->stype==PAF_VECT || ma->mode & MA_HALO_SHADE) {
where_is_particle(paf, pa, stime, vec);
- MTC_Mat4MulVecfl(R.viewmat, vec);
+ MTC_Mat4MulVecfl(mat, vec);
where_is_particle(paf, pa, ptime, vec1);
- MTC_Mat4MulVecfl(R.viewmat, vec1);
+ MTC_Mat4MulVecfl(mat, vec1);
}
else {
where_is_particle(paf, pa, ctime, vec);
- MTC_Mat4MulVecfl(R.viewmat, vec);
+ MTC_Mat4MulVecfl(mat, vec);
}
if(pa->mat_nr != mat_nr) {
@@ -1492,7 +1496,6 @@ static void init_render_mesh(Object *ob)
if(need_orco) orco = get_object_orco(ob);
- /* duplicators don't call modifier stack */
dm = mesh_create_derived_render(ob);
dm_needsfree= 1;