diff options
author | Philipp Oeser <info@graphics-engineer.com> | 2021-02-02 14:54:38 +0300 |
---|---|---|
committer | Philipp Oeser <info@graphics-engineer.com> | 2021-02-02 17:32:35 +0300 |
commit | 9e0c876aadd9641fa9e8d6d8717c757b8b528d8b (patch) | |
tree | f5787a0bf889c68a421d97cd656a400dbac3ffff /source/blender/draw/engines/overlay/overlay_wireframe.c | |
parent | 1d77302fd9ea9b3892ebdcf28150b3f7d40aeb21 (diff) |
Fix T85301: Eevee does not respect collection instance offset for hair
This resulted in hair drawing with an offset if an instance_offset was
set.
note: Usually the instance_offset gets combined with the objects obmat
in 'make_duplis_collection' / 'make_dupli', see
> /* Combine collection offset and `obmat`. */
Using the resulting DupliObject->mat instead does include the
instance_offset, but this results in double-transforms (something that I
have not investigated further), so now reconstruct the correct matrix
from scratch.
Maniphest Tasks: T85301
Differential Revision: https://developer.blender.org/D10285
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_wireframe.c')
-rw-r--r-- | source/blender/draw/engines/overlay/overlay_wireframe.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_wireframe.c b/source/blender/draw/engines/overlay/overlay_wireframe.c index 617dda56421..7ba5fb3a426 100644 --- a/source/blender/draw/engines/overlay/overlay_wireframe.c +++ b/source/blender/draw/engines/overlay/overlay_wireframe.c @@ -20,6 +20,7 @@ * \ingroup draw_engine */ +#include "DNA_collection_types.h" #include "DNA_mesh_types.h" #include "DNA_particle_types.h" #include "DNA_view3d_types.h" @@ -141,7 +142,12 @@ static void wireframe_hair_cache_populate(OVERLAY_Data *vedata, Object *ob, Part float dupli_mat[4][4]; if ((dupli_parent != NULL) && (dupli_object != NULL)) { if (dupli_object->type & OB_DUPLICOLLECTION) { - copy_m4_m4(dupli_mat, dupli_parent->obmat); + unit_m4(dupli_mat); + Collection *collection = dupli_parent->instance_collection; + if (collection != NULL) { + sub_v3_v3(dupli_mat[3], collection->instance_offset); + } + mul_m4_m4m4(dupli_mat, dupli_parent->obmat, dupli_mat); } else { copy_m4_m4(dupli_mat, dupli_object->ob->obmat); |