Mod_util: Add back vcos parameter to get_texture_coords_mesh().
Now we use vcos when provided, and fall back to mesh vertices' co otherwise. Deform modifiers usually do not have up-to-date coordinates in Mesh itself, only in given vcos array!
This commit is contained in:
@@ -72,10 +72,12 @@ void modifier_init_texture(const Scene *scene, Tex *tex)
|
||||
}
|
||||
|
||||
/* TODO to be renamed to get_texture_coords once we are done with moving modifiers to Mesh. */
|
||||
/** \param cos may be NULL, in which case we use directly mesh vertices' coordinates. */
|
||||
void get_texture_coords_mesh(
|
||||
MappingInfoModifierData *dmd,
|
||||
Object *ob,
|
||||
Mesh *mesh,
|
||||
float (*cos)[3],
|
||||
float (*r_texco)[3])
|
||||
{
|
||||
const int numVerts = mesh->totvert;
|
||||
@@ -135,16 +137,19 @@ void get_texture_coords_mesh(
|
||||
for (i = 0; i < numVerts; ++i, ++mv, ++r_texco) {
|
||||
switch (texmapping) {
|
||||
case MOD_DISP_MAP_LOCAL:
|
||||
copy_v3_v3(*r_texco, mv->co);
|
||||
copy_v3_v3(*r_texco, cos != NULL ? *cos : mv->co);
|
||||
break;
|
||||
case MOD_DISP_MAP_GLOBAL:
|
||||
mul_v3_m4v3(*r_texco, ob->obmat, mv->co);
|
||||
mul_v3_m4v3(*r_texco, ob->obmat, cos != NULL ? *cos : mv->co);
|
||||
break;
|
||||
case MOD_DISP_MAP_OBJECT:
|
||||
mul_v3_m4v3(*r_texco, ob->obmat, mv->co);
|
||||
mul_v3_m4v3(*r_texco, ob->obmat, cos != NULL ? *cos : mv->co);
|
||||
mul_m4_v3(mapob_imat, *r_texco);
|
||||
break;
|
||||
}
|
||||
if (cos != NULL) {
|
||||
cos++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ void get_texture_coords_mesh(
|
||||
struct MappingInfoModifierData *dmd,
|
||||
struct Object *ob,
|
||||
struct Mesh *mesh,
|
||||
float (*cos)[3],
|
||||
float (*r_texco)[3]);
|
||||
void modifier_vgroup_cache(struct ModifierData *md, float (*vertexCos)[3]);
|
||||
struct DerivedMesh *get_cddm(struct Object *ob, struct BMEditMesh *em, struct DerivedMesh *dm,
|
||||
|
||||
@@ -145,7 +145,7 @@ void weightvg_do_mask(const int num, const int *indices, float *org_w, const flo
|
||||
t_map.texmapping = tex_mapping;
|
||||
|
||||
tex_co = MEM_calloc_arrayN(numVerts, sizeof(*tex_co), "WeightVG Modifier, TEX mode, tex_co");
|
||||
get_texture_coords_mesh(&t_map, ob, mesh, tex_co);
|
||||
get_texture_coords_mesh(&t_map, ob, mesh, NULL, tex_co);
|
||||
|
||||
modifier_init_texture(scene, texture);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user