diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-12-06 20:33:52 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-12-06 20:33:52 +0300 |
commit | 6d31eb015c6a3f6c3ff2a998fc52416c25c4e5b6 (patch) | |
tree | 8606d2b440f3cd6a9bf6ebad73c4e5860bf64e86 /source/blender/modifiers | |
parent | 2dfd795bd2e698d19dd8a1eeac2992e047aaec9b (diff) |
Array Modifier: option to offset UV's
D2912 by @Zuorion
Diffstat (limited to 'source/blender/modifiers')
-rw-r--r-- | source/blender/modifiers/intern/MOD_array.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c index 874ac34b613..a3f3af0c748 100644 --- a/source/blender/modifiers/intern/MOD_array.c +++ b/source/blender/modifiers/intern/MOD_array.c @@ -655,6 +655,26 @@ static DerivedMesh *arrayModifier_doArray( } } + /* handle UVs */ + if (chunk_nloops > 0 && is_zero_v2(amd->uv_offset) == false) { + const int totuv = CustomData_number_of_layers(&result->loopData, CD_MLOOPUV); + for (i = 0; i < totuv; i++) { + MLoopUV *dmloopuv = CustomData_get_layer_n(&result->loopData, CD_MLOOPUV, i); + dmloopuv += chunk_nloops; + for (c = 1; c < count; c++) { + const float uv_offset[2] = { + amd->uv_offset[0] * (float)c, + amd->uv_offset[1] * (float)c, + }; + int l_index = chunk_nloops; + for (; l_index-- != 0; dmloopuv++) { + dmloopuv->uv[0] += uv_offset[0]; + dmloopuv->uv[1] += uv_offset[1]; + } + } + } + } + last_chunk_start = (count - 1) * chunk_nverts; last_chunk_nverts = chunk_nverts; |