From afe7ea072dfa13a84d8403936c3424a259ef5920 Mon Sep 17 00:00:00 2001 From: Nicholas Bishop Date: Mon, 8 Jan 2007 08:02:26 +0000 Subject: [PATCH] Fixed a couple bugs with multires+weightgroups: 1) weightgroups are now being properly applied to the mesh on Level 1. 2) Corrected the algorithm that interpolates weightgroups for all the other levels so that it more or less matches the subsurf output. --- source/blender/src/multires.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/source/blender/src/multires.c b/source/blender/src/multires.c index d3f1d12f58e..46118a4f13b 100644 --- a/source/blender/src/multires.c +++ b/source/blender/src/multires.c @@ -432,7 +432,7 @@ void multires_add_dvert(MDeformVert *out, const MDeformVert *in, const float w) found= 0; for(j=0; jtotweight; ++j) { if(out->dw[j].def_nr==in->dw[i].def_nr) { - out->dw[j].weight += w; + out->dw[j].weight += in->dw[i].weight * w; found= 1; } } @@ -445,7 +445,7 @@ void multires_add_dvert(MDeformVert *out, const MDeformVert *in, const float w) } out->dw= newdw; - out->dw[out->totweight].weight= w; + out->dw[out->totweight].weight= in->dw[i].weight * w; out->dw[out->totweight].def_nr= in->dw[i].def_nr; ++out->totweight; @@ -1204,9 +1204,10 @@ void multires_level_to_mesh(Object *ob, Mesh *me) for(i=0, eve= em->verts.first; eve; ++i, eve= eve->next) CustomData_em_set(&em->vdata, eve->data, CD_MDEFORMVERT, CustomData_get(&me->mr->vdata, i, CD_MDEFORMVERT)); - } else - CustomData_merge(&me->mr->vdata, (em ? &em->vdata : &me->vdata), - vdata_mask, CD_DUPLICATE, lvl->totvert); + } else { + CustomData_merge(&me->mr->vdata, &me->vdata, vdata_mask, CD_DUPLICATE, lvl->totvert); + me->dvert= CustomData_get(&me->mr->vdata, 0, CD_MDEFORMVERT); + } } else if(CustomData_has_layer(&me->mr->vdata, CD_MDEFORMVERT)) { MultiresLevel *dlvl, *lvl1= me->mr->levels.first;