- int i;
- int *weightindex = model->surfmesh.data_vertexweightindex4i;
- float *weightinfluence = model->surfmesh.data_vertexweightinfluence4f;
- for (i = 0;i < model->surfmesh.num_blends;i++, weightindex += 4, weightinfluence += 4)
+ int i, total;
+ float scale;
+ blendweights_t *weights;
+ blendweights_t newweights;
+ if(!newinfluence[1])
+ return newindex[0];
+ scale = 0;
+ for (i = 0;i < 4;i++)
+ scale += newinfluence[i];
+ scale = 255.0f / scale;
+ total = 0;
+ for (i = 0;i < 4;i++)
+ {
+ newweights.index[i] = newindex[i];
+ newweights.influence[i] = (unsigned char)(newinfluence[i] * scale);
+ total += newweights.influence[i];
+ }
+ while (total > 255)
+ {
+ for (i = 0;i < 4;i++)
+ {
+ if(newweights.influence[i] > 0 && total > 255)
+ {
+ newweights.influence[i]--;
+ total--;
+ }
+ }
+ }
+ while (total < 255)
+ {
+ for (i = 0; i < 4;i++)
+ {
+ if(newweights.influence[i] < 255 && total < 255)
+ {
+ newweights.influence[i]++;
+ total++;
+ }
+ }
+ }
+ weights = model->surfmesh.data_blendweights;
+ for (i = 0;i < model->surfmesh.num_blends;i++, weights++)