[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35448] trunk/blender/source/blender/ editors/sculpt_paint/paint_image.c: fix [#26406] Projection Paint, Occlussion Problem with Intersections in perspective mode.
Campbell Barton
ideasman42 at gmail.com
Thu Mar 10 09:51:41 CET 2011
Revision: 35448
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35448
Author: campbellbarton
Date: 2011-03-10 08:51:41 +0000 (Thu, 10 Mar 2011)
Log Message:
-----------
fix [#26406] Projection Paint, Occlussion Problem with Intersections in perspective mode.
Modified Paths:
--------------
trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c 2011-03-10 06:06:55 UTC (rev 35447)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c 2011-03-10 08:51:41 UTC (rev 35448)
@@ -512,8 +512,34 @@
static float VecZDepthPersp(float pt[2], float v1[3], float v2[3], float v3[3], float w[3])
{
+ float wtot_inv, wtot;
+ float w_tmp[3];
+
barycentric_weights_v2_persp(v1, v2, v3, pt, w);
- return (v1[2]*w[0]) + (v2[2]*w[1]) + (v3[2]*w[2]);
+ /* for the depth we need the weights to match what
+ * barycentric_weights_v2 would return, in this case its easiest just to
+ * undo the 4th axis division and make it unit-sum
+ *
+ * don't call barycentric_weights_v2() becaue our callers expect 'w'
+ * to be weighted from the perspective */
+ w_tmp[0]= w[0] * v1[3];
+ w_tmp[1]= w[1] * v2[3];
+ w_tmp[2]= w[2] * v3[3];
+
+ wtot = w_tmp[0]+w_tmp[1]+w_tmp[2];
+
+ if (wtot != 0.0f) {
+ wtot_inv = 1.0f/wtot;
+
+ w_tmp[0] = w_tmp[0]*wtot_inv;
+ w_tmp[1] = w_tmp[1]*wtot_inv;
+ w_tmp[2] = w_tmp[2]*wtot_inv;
+ }
+ else /* dummy values for zero area face */
+ w_tmp[0] = w_tmp[1] = w_tmp[2] = 1.0f/3.0f;
+ /* done mimicing barycentric_weights_v2() */
+
+ return (v1[2]*w_tmp[0]) + (v2[2]*w_tmp[1]) + (v3[2]*w_tmp[2]);
}
More information about the Bf-blender-cvs
mailing list