diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2011-01-31 23:02:51 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2011-01-31 23:02:51 +0300 |
commit | 329e2d8037050e06d16984924a412e8b32ad4351 (patch) | |
tree | f8b38481445cc1492777383f94be74caa3fb29ce /source/blender/blenkernel/intern/multires.c | |
parent | 55865239a236e5567b78bf95001b0de3ab049717 (diff) |
Todo issue: sculpting on deformed mesh
Used a crazyspace approach (like in edit mode), but only modifiers with
deformMatricies are allowed atm (currently shapekeys and armature modifiers only).
All the rest modifiers had an warning message that they aren't applied because
of sculpt mode. Deformation of multires is also unsupported.
With all this restictions users will always see the actual "layer" (or maybe
mesh state would be more correct word) they are sculpting on.
Internal changes:
- All modifiers could have deformMatricies callback (the same as deformMatriciesEM but
for non-edit mode usage)
- Added function to build crazyspace for sculpting (sculpt_get_deform_matrices), but it
could be generalized for usage in other painting modes (particle edit mode, i.e)
Todo:
- Implement crazyspace correction to support all kinds of deformation modifiers
- Maybe deformation of multires isn't so difficult?
- And maybe we could avoid extra bad-level-stub for ED_sculpt_modifiers_changed
without code duplicating?
Diffstat (limited to 'source/blender/blenkernel/intern/multires.c')
-rw-r--r-- | source/blender/blenkernel/intern/multires.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index c67abc47e6f..2a3052d10c9 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -92,8 +92,10 @@ MultiresModifierData *find_multires_modifier_before(Scene *scene, ModifierData * return NULL; } -/* used for applying scale on mdisps layer and syncing subdivide levels when joining objects */ -static MultiresModifierData *get_multires_modifier(Scene *scene, Object *ob) +/* used for applying scale on mdisps layer and syncing subdivide levels when joining objects + use_first - return first multires modifier if all multires'es are disabled +*/ +MultiresModifierData *get_multires_modifier(Scene *scene, Object *ob, int use_first) { ModifierData *md; MultiresModifierData *mmd= NULL, *firstmmd= NULL; @@ -111,7 +113,7 @@ static MultiresModifierData *get_multires_modifier(Scene *scene, Object *ob) } } - if(!mmd) { + if(!mmd && use_first) { /* active multires have not been found try to use first one */ return firstmmd; @@ -1568,8 +1570,8 @@ void multires_load_old(Object *ob, Mesh *me) static void multires_sync_levels(Scene *scene, Object *ob, Object *to_ob) { - MultiresModifierData *mmd= get_multires_modifier(scene, ob); - MultiresModifierData *to_mmd= get_multires_modifier(scene, to_ob); + MultiresModifierData *mmd= get_multires_modifier(scene, ob, 1); + MultiresModifierData *to_mmd= get_multires_modifier(scene, to_ob, 1); if(!mmd) { /* object could have MDISP even when there is no multires modifier @@ -1599,7 +1601,7 @@ void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3]) int *gridOffset; int i, /*numGrids,*/ gridSize, dGridSize, dSkip, totvert; float (*vertCos)[3] = NULL; - MultiresModifierData *mmd= get_multires_modifier(scene, ob); + MultiresModifierData *mmd= get_multires_modifier(scene, ob, 1); MultiresModifierData high_mmd; CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); @@ -1725,7 +1727,7 @@ void multires_topology_changed(Scene *scene, Object *ob) Mesh *me= (Mesh*)ob->data; MDisps *mdisp= NULL, *cur= NULL; int i, grid= 0, corners; - MultiresModifierData *mmd= get_multires_modifier(scene, ob); + MultiresModifierData *mmd= get_multires_modifier(scene, ob, 1); if(mmd) multires_set_tot_mdisps(me, mmd->totlvl); |