diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-01-07 15:41:07 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-01-07 15:41:07 +0300 |
commit | e77fadf06682fd686eea458c351ac985d6b34ae8 (patch) | |
tree | 079f9e7f39ff0eff0aab46b2acb138fe2bbf4331 | |
parent | c1d510470355a3cb228b96615e1c5796271627ad (diff) |
fix for painting bug added since 25391 (own fault)
Making shell_angle_to_dist use radians was needed for solidify but somehow broke paint. Need to look into further but for now this fixes it.
-rw-r--r-- | source/blender/blenlib/BLI_math_vector.h | 2 | ||||
-rw-r--r-- | source/blender/blenlib/intern/math_vector_inline.c | 12 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_image.c | 49 |
3 files changed, 34 insertions, 29 deletions
diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h index 4dbef4ef07c..4719a835788 100644 --- a/source/blender/blenlib/BLI_math_vector.h +++ b/source/blender/blenlib/BLI_math_vector.h @@ -72,11 +72,13 @@ MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3]); MINLINE void mul_v2_fl(float r[2], float f); MINLINE void mul_v3_fl(float r[3], float f); MINLINE void mul_v3_v3fl(float r[3], float a[3], float f); +MINLINE void mul_v2_v2(float r[2], const float a[2]); MINLINE void mul_v3_v3(float r[3], float a[3]); MINLINE void mul_v3_v3v3(float r[3], float a[3], float b[3]); MINLINE void madd_v3_v3fl(float r[3], float a[3], float f); MINLINE void madd_v3_v3v3(float r[3], float a[3], float b[3]); +MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], const float b[2], const float f); MINLINE void madd_v3_v3v3fl(float r[3], float a[3], float b[3], float f); MINLINE void madd_v3_v3v3v3(float r[3], float a[3], float b[3], float c[3]); diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c index 8b09cb86d3a..86a0d0f49a1 100644 --- a/source/blender/blenlib/intern/math_vector_inline.c +++ b/source/blender/blenlib/intern/math_vector_inline.c @@ -145,6 +145,12 @@ MINLINE void mul_v3_v3fl(float r[3], float a[3], float f) r[2]= a[2]*f; } +MINLINE void mul_v2_v2(float r[2], const float a[2]) +{ + r[0] *= a[0]; + r[1] *= a[1]; +} + MINLINE void mul_v3_v3(float r[3], float a[3]) { r[0] *= a[0]; @@ -166,6 +172,12 @@ MINLINE void madd_v3_v3v3(float r[3], float a[3], float b[3]) r[2] += a[2]*b[2]; } +MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], const float b[2], const float f) +{ + r[0] = a[0] + b[0]*f; + r[1] = a[1] + b[1]*f; +} + MINLINE void madd_v3_v3v3fl(float r[3], float a[3], float b[3], float f) { r[0] = a[0] + b[0]*f; diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index 4c903f66def..2c80a7095e2 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -1001,8 +1001,7 @@ static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const fl float puv[4][2]; /* pixelspace uv's */ float no1[2], no2[2], no3[2], no4[2]; /* normals */ float dir1[2], dir2[2], dir3[2], dir4[2]; - float ibuf_x_inv = 1.0f / (float)ibuf_x; - float ibuf_y_inv = 1.0f / (float)ibuf_y; + float ibuf_inv[2] = {1.0f / (float)ibuf_x, 1.0f / (float)ibuf_y}; /* make UV's in pixel space so we can */ puv[0][0] = orig_uv[0][0] * ibuf_x; @@ -1035,17 +1034,20 @@ static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const fl sub_v2_v2v2(dir3, puv[0], puv[2]); normalize_v2(dir3); } - + + /* TODO - angle_normalized_v2v2(...) * (M_PI/180.0f) + * This is incorrect. Its already given radians but without it wont work. + * need to look into a fix - campbell */ if (is_quad) { - a1 = shell_angle_to_dist(angle_normalized_v2v2(dir4, dir1)); - a2 = shell_angle_to_dist(angle_normalized_v2v2(dir1, dir2)); - a3 = shell_angle_to_dist(angle_normalized_v2v2(dir2, dir3)); - a4 = shell_angle_to_dist(angle_normalized_v2v2(dir3, dir4)); + a1 = shell_angle_to_dist(angle_normalized_v2v2(dir4, dir1) * (M_PI/180.0f)); + a2 = shell_angle_to_dist(angle_normalized_v2v2(dir1, dir2) * (M_PI/180.0f)); + a3 = shell_angle_to_dist(angle_normalized_v2v2(dir2, dir3) * (M_PI/180.0f)); + a4 = shell_angle_to_dist(angle_normalized_v2v2(dir3, dir4) * (M_PI/180.0f)); } else { - a1 = shell_angle_to_dist(angle_normalized_v2v2(dir3, dir1)); - a2 = shell_angle_to_dist(angle_normalized_v2v2(dir1, dir2)); - a3 = shell_angle_to_dist(angle_normalized_v2v2(dir2, dir3)); + a1 = shell_angle_to_dist(angle_normalized_v2v2(dir3, dir1) * (M_PI/180.0f)); + a2 = shell_angle_to_dist(angle_normalized_v2v2(dir1, dir2) * (M_PI/180.0f)); + a3 = shell_angle_to_dist(angle_normalized_v2v2(dir2, dir3) * (M_PI/180.0f)); } if (is_quad) { @@ -1065,17 +1067,10 @@ static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const fl add_v2_v2v2(outset_uv[1], puv[1], no2); add_v2_v2v2(outset_uv[2], puv[2], no3); add_v2_v2v2(outset_uv[3], puv[3], no4); - outset_uv[0][0] *= ibuf_x_inv; - outset_uv[0][1] *= ibuf_y_inv; - - outset_uv[1][0] *= ibuf_x_inv; - outset_uv[1][1] *= ibuf_y_inv; - - outset_uv[2][0] *= ibuf_x_inv; - outset_uv[2][1] *= ibuf_y_inv; - - outset_uv[3][0] *= ibuf_x_inv; - outset_uv[3][1] *= ibuf_y_inv; + mul_v2_v2(outset_uv[0], ibuf_inv); + mul_v2_v2(outset_uv[1], ibuf_inv); + mul_v2_v2(outset_uv[2], ibuf_inv); + mul_v2_v2(outset_uv[3], ibuf_inv); } else { sub_v2_v2v2(no1, dir3, dir1); @@ -1090,14 +1085,10 @@ static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const fl add_v2_v2v2(outset_uv[0], puv[0], no1); add_v2_v2v2(outset_uv[1], puv[1], no2); add_v2_v2v2(outset_uv[2], puv[2], no3); - outset_uv[0][0] *= ibuf_x_inv; - outset_uv[0][1] *= ibuf_y_inv; - - outset_uv[1][0] *= ibuf_x_inv; - outset_uv[1][1] *= ibuf_y_inv; - - outset_uv[2][0] *= ibuf_x_inv; - outset_uv[2][1] *= ibuf_y_inv; + + mul_v2_v2(outset_uv[0], ibuf_inv); + mul_v2_v2(outset_uv[1], ibuf_inv); + mul_v2_v2(outset_uv[2], ibuf_inv); } } |