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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2007-12-06 20:43:47 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2007-12-06 20:43:47 +0300
commit51322964f4e00891621e249e5bd15e93a2d2ee06 (patch)
treedb080b5b4260a6d898ee609a313a29a321d2e5ce /source/blender/render
parentff52c8f2d6dbafc6b25879efdc47bfc4b99cf8f7 (diff)
Particles
========= - Normalize strand coordinates over the length of the strand, not cut off when with e.g. length texture control. - Weight paint and particle mode x-mirror now works with deformation and shape keys active. - X-ray is now disabled in particle mode, messed up depth tests.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/convertblender.c20
-rw-r--r--source/blender/render/intern/source/renderdatabase.c4
2 files changed, 19 insertions, 5 deletions
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 127f2d427d5..9280b457a4c 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -1734,7 +1734,7 @@ static int render_new_particle_system(Render *re, Object *ob, ParticleSystem *ps
StrandRen *strand=0;
RNG *rng= 0;
float loc[3],loc1[3],loc0[3],vel[3],mat[4][4],nmat[3][3],co[3],nor[3],time;
- float *orco=0,*surfnor=0,*uvco=0;
+ float *orco=0,*surfnor=0,*uvco=0, strandlen=0.0f, curlen=0.0f;
float hasize, pa_size, pa_time, r_tilt, cfra=bsystem_time(ob,(float)CFRA,0.0);
float loc_tex[3], size_tex[3], adapt_angle=0.0, adapt_pix=0.0, random;
int i, a, k, max_k=0, totpart, totvlako, totverto, totuv=0, override_uv=-1;
@@ -2043,6 +2043,7 @@ static int render_new_particle_system(Render *re, Object *ob, ParticleSystem *ps
orco[2] = (orco[2]-loc_tex[2])/size_tex[2];
}
+ /* surface normal shading setup */
if(ma->mode_l & MA_STR_SURFDIFF) {
Mat3MulVecfl(nmat, nor);
surfnor= nor;
@@ -2050,7 +2051,8 @@ static int render_new_particle_system(Render *re, Object *ob, ParticleSystem *ps
else
surfnor= NULL;
- if(strandbuf) { /* strand render */
+ /* strand render setup */
+ if(strandbuf) {
strand= RE_findOrAddStrand(re, re->totstrand++);
strand->buffer= strandbuf;
strand->vert= svert;
@@ -2073,9 +2075,17 @@ static int render_new_particle_system(Render *re, Object *ob, ParticleSystem *ps
}
}
+ /* strandco computation setup */
+ if(path_nbr) {
+ strandlen= 0.0f;
+ curlen= 0.0f;
+ for(k=1; k<=path_nbr; k++)
+ if(k<=max_k)
+ strandlen += VecLenf((cache+k-1)->co, (cache+k)->co);
+ }
+
for(k=0; k<=path_nbr; k++){
if(path_nbr){
- time=(float)k/(float)path_nbr;
if(k<=max_k){
//bti->convert_bake_key(bsys,cache+k,0,(void*)&state);
//copy_particle_key(&state,cache+k,0);
@@ -2084,6 +2094,10 @@ static int render_new_particle_system(Render *re, Object *ob, ParticleSystem *ps
}
else
continue;
+
+ if(k > 0)
+ curlen += VecLenf((cache+k-1)->co, (cache+k)->co);
+ time= curlen/strandlen;
}
else{
time=0.0f;
diff --git a/source/blender/render/intern/source/renderdatabase.c b/source/blender/render/intern/source/renderdatabase.c
index 87306e9fbb5..1d490637222 100644
--- a/source/blender/render/intern/source/renderdatabase.c
+++ b/source/blender/render/intern/source/renderdatabase.c
@@ -548,11 +548,11 @@ float *RE_strandren_get_uv(Render *re, StrandRen *strand, int n, char **name, in
float **uv= node->uv;
int size= (n+1)*256;
- node->uv= MEM_callocN(size*sizeof(MCol*), "Strand uv");
+ node->uv= MEM_callocN(size*sizeof(float*), "Strand uv");
if(uv) {
size= node->totuv*256;
- memcpy(node->uv, uv, size*sizeof(MCol*));
+ memcpy(node->uv, uv, size*sizeof(float*));
MEM_freeN(uv);
}