diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-12-16 22:19:08 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-12-16 22:19:08 +0300 |
commit | 5e48ab8d75bd5ce3085a9de183f36107f6d5d616 (patch) | |
tree | dd93878d1daa80aaa1984b989a081dadedebdd11 /source | |
parent | fabb36a98af27aa5353c9c968ca7df3f7c134a77 (diff) |
Sculpt:
* Increase epsilon for intersection a bit more, ortho view + small
faces are problematic.
* Fix a redraw issue with one partial redraw too much at the end of
the stroke.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenlib/intern/math_geom.c | 11 | ||||
-rw-r--r-- | source/blender/blenlib/intern/pbvh.c | 2 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt.c | 2 |
3 files changed, 9 insertions, 6 deletions
diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c index 75c32c5b45b..3e714b384a7 100644 --- a/source/blender/blenlib/intern/math_geom.c +++ b/source/blender/blenlib/intern/math_geom.c @@ -474,14 +474,15 @@ int isect_ray_tri_epsilon_v3(float p1[3], float d[3], float v0[3], float v1[3], sub_v3_v3v3(s, p1, v0); cross_v3_v3v3(q, s, e1); - *lambda = f * dot_v3v3(e2, q); - if ((*lambda < 0.0)) return 0; - + u = f * dot_v3v3(s, p); - if ((u < -epsilon)||(u > 1.0+epsilon)) return 0; + if ((u < -epsilon)||(u > 1.0f+epsilon)) return 0; v = f * dot_v3v3(d, q); - if ((v < -epsilon)||((u + v) > 1.0+epsilon)) return 0; + if ((v < -epsilon)||((u + v) > 1.0f+epsilon)) return 0; + + *lambda = f * dot_v3v3(e2, q); + if ((*lambda < 0.0f)) return 0; if(uv) { uv[0]= u; diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c index d8e3fe4b0be..ff68e3b0881 100644 --- a/source/blender/blenlib/intern/pbvh.c +++ b/source/blender/blenlib/intern/pbvh.c @@ -1142,7 +1142,7 @@ static int ray_face_intersection(float ray_start[3], float ray_normal[3], float dist = FLT_MAX; if(!isect_ray_tri_epsilon_v3(ray_start, ray_normal, t0, t1, t2, - &dist, NULL, 0.001f)) + &dist, NULL, 0.1f)) dist = FLT_MAX; if(dist >= 0 && dist < *fdist) { diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index e6fe1a5153d..ce0a4d149bb 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -1843,6 +1843,7 @@ int sculpt_stroke_get_location(bContext *C, struct PaintStroke *stroke, float ou invert_m4_m4(obimat, ss->ob->obmat); mul_m4_v3(obimat, ray_start); mul_mat3_m4_v3(obimat, ray_normal); + normalize_v3(ray_normal); srd.ss = vc->obact->sculpt; srd.ray_start = ray_start; @@ -2055,6 +2056,7 @@ static void sculpt_stroke_done(bContext *C, struct PaintStroke *stroke) if(ss->refkb) sculpt_key_to_mesh(ss->refkb, ob); + ss->partial_redraw = 0; WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); } } |