diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-04-22 14:34:41 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-04-22 14:34:41 +0400 |
commit | bee5b1137e8594146df3536a023fea0ab78bb508 (patch) | |
tree | 454495b6e0f992e3b2e9e2b018df1c3f80237075 /source/blender/render | |
parent | ea8ffd82018b5c522681793aa2f820c58b54a9d4 (diff) |
Fix for bug #9489: particle uv coordinates were not correct
for children from particles on subsurf.
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index c2bb6229131..33cad2789c6 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -1884,14 +1884,24 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem } } else if(ELEM(part->from,PART_FROM_FACE,PART_FROM_VOLUME)){ - for(i=0; i<totuv; i++){ - ParticleData *parent = psys->particles+cpa->parent; - MFace *mface=psmd->dm->getFaceData(psmd->dm,parent->num,CD_MFACE); + ParticleData *parent = psys->particles + cpa->parent; + num= parent->num_dmcache; - mtface=(MTFace*)CustomData_get_layer_n(&psmd->dm->faceData,CD_MTFACE,i); - mtface+=parent->num; - - psys_interpolate_uvs(mtface,mface->v4,parent->fuv,uvco+2*i); + if(num == DMCACHE_NOTFOUND) + if(parent->num < psmd->dm->getNumFaces(psmd->dm)) + num= parent->num; + + for(i=0; i<totuv; i++) { + if(num != DMCACHE_NOTFOUND) { + MFace *mface=psmd->dm->getFaceData(psmd->dm,num,CD_MFACE); + mtface=(MTFace*)CustomData_get_layer_n(&psmd->dm->faceData,CD_MTFACE,i); + mtface+=num; + psys_interpolate_uvs(mtface,mface->v4,parent->fuv,uvco+2*i); + } + else { + uvco[2*i]= 0.0f; + uvco[2*i + 1]= 0.0f; + } } } } @@ -1911,13 +1921,23 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem } } else if(ELEM(part->from,PART_FROM_FACE,PART_FROM_VOLUME)){ + ParticleData *parent = psys->particles + cpa->parent; + num= parent->num_dmcache; + + if(num == DMCACHE_NOTFOUND) + if(parent->num < psmd->dm->getNumFaces(psmd->dm)) + num= parent->num; + for(i=0; i<totcol; i++){ - ParticleData *parent = psys->particles+cpa->parent; - MFace *mface=psmd->dm->getFaceData(psmd->dm,parent->num,CD_MFACE); - MCol *mc=(MCol*)CustomData_get_layer_n(&psmd->dm->faceData,CD_MCOL,i); - mc+=parent->num*4; - - psys_interpolate_mcol(mc,mface->v4,parent->fuv,mcol+i); + if(num != DMCACHE_NOTFOUND) { + MFace *mface=psmd->dm->getFaceData(psmd->dm,num,CD_MFACE); + MCol *mc=(MCol*)CustomData_get_layer_n(&psmd->dm->faceData,CD_MCOL,i); + mc+=num*4; + + psys_interpolate_mcol(mc,mface->v4,parent->fuv,mcol+i); + } + else + memset(&mcol[i], 0, sizeof(MCol)); } } } |