[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56181] trunk/blender/source/blender/ blenkernel/intern/editderivedmesh.c: fix [#35025] Mesh Debug samples strange behavior

Campbell Barton ideasman42 at gmail.com
Sat Apr 20 18:29:37 CEST 2013


Revision: 56181
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56181
Author:   campbellbarton
Date:     2013-04-20 16:29:37 +0000 (Sat, 20 Apr 2013)
Log Message:
-----------
fix [#35025] Mesh Debug samples strange behavior

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c

Modified: trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2013-04-20 16:14:31 UTC (rev 56180)
+++ trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2013-04-20 16:29:37 UTC (rev 56181)
@@ -1681,32 +1681,36 @@
 
 		normal_tri_v3(ray_no, cos[2], cos[1], cos[0]);
 
+#define FACE_RAY_TEST_ANGLE \
+		f_hit = BKE_bmbvh_ray_cast(bmtree, ray_co, ray_no, \
+		                           &dist, NULL, NULL); \
+		if (f_hit) { \
+			float angle_fac = fabsf(dot_v3v3(ltri[0]->f->no, f_hit->no)); \
+			angle_fac = 1.0f - angle_fac; \
+			angle_fac = angle_fac * angle_fac * angle_fac; \
+			angle_fac = 1.0f - angle_fac; \
+			dist /= angle_fac; \
+			if (dist < face_dists[index]) { \
+				face_dists[index] = dist; \
+			} \
+		} (void)0
+
 		if (use_jit) {
 			int j;
 			for (j = 0; j < samples; j++) {
+				float dist = face_dists[index];
 				interp_v3_v3v3v3_uv(ray_co, cos[0], cos[1], cos[2], jit_ofs[j]);
 				madd_v3_v3fl(ray_co, ray_no, eps_offset);
 
-				f_hit = BKE_bmbvh_ray_cast(bmtree, ray_co, ray_no,
-				                           &face_dists[index], NULL, NULL);
-				/* duplicate */
-				if (f_hit) {
-					const int index_hit = BM_elem_index_get(f_hit);
-					face_dists[index] = face_dists[index_hit] = min_ff(face_dists[index], face_dists[index_hit]);
-				}
+				FACE_RAY_TEST_ANGLE;
 			}
 		}
 		else {
+			float dist = face_dists[index];
 			mid_v3_v3v3v3(ray_co, cos[0], cos[1], cos[2]);
 			madd_v3_v3fl(ray_co, ray_no, eps_offset);
 
-			f_hit = BKE_bmbvh_ray_cast(bmtree, ray_co, ray_no,
-			                           &face_dists[index], NULL, NULL);
-			/* duplicate */
-			if (f_hit) {
-				const int index_hit = BM_elem_index_get(f_hit);
-				face_dists[index] = face_dists[index_hit] = min_ff(face_dists[index], face_dists[index_hit]);
-			}
+			FACE_RAY_TEST_ANGLE;
 		}
 	}
 




More information about the Bf-blender-cvs mailing list