Revision: 16025
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16025
Author: genscher
Date: 2008-08-08 16:24:47 +0200 (Fri, 08 Aug 2008)
Log Message:
-----------
Fixing point-face distance to support degenerated tris/quads with
area<FLT_EPSILON
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/bvhutils.c
Modified: trunk/blender/source/blender/blenkernel/intern/bvhutils.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/bvhutils.c 2008-08-08
11:40:51 UTC (rev 16024)
+++ trunk/blender/source/blender/blenkernel/intern/bvhutils.c 2008-08-08
14:24:47 UTC (rev 16025)
@@ -268,17 +268,24 @@
do
{
float nearest_tmp[3], dist;
-
- dist = nearest_point_in_tri_surface(co,t0, t1, t2, nearest_tmp);
- if(dist < nearest->dist)
+ float vec[3][3];
+
+ // only insert valid triangles / quads with area > 0
+ VECSUB(vec[0], t2, t1);
+ VECSUB(vec[1], t0, t1);
+ Crossf(vec[2], vec[0], vec[1]);
+ if(INPR(vec[2], vec[2]) >= FLT_EPSILON)
{
- nearest->index = index;
- nearest->dist = dist;
- VECCOPY(nearest->co, nearest_tmp);
- CalcNormFloat((float*)t0, (float*)t1, (float*)t2,
nearest->no); //TODO.. (interpolate normals from the vertexs coordinates?
+ dist = nearest_point_in_tri_surface(co,t0, t1, t2,
nearest_tmp);
+ if(dist < nearest->dist)
+ {
+ nearest->index = index;
+ nearest->dist = dist;
+ VECCOPY(nearest->co, nearest_tmp);
+ CalcNormFloat((float*)t0, (float*)t1,
(float*)t2, nearest->no); //TODO.. (interpolate normals from the vertexs
coordinates?
+ }
}
-
t1 = t2;
t2 = t3;
t3 = NULL;
@@ -396,7 +403,7 @@
VECCOPY(co[2], vert[ face[i].v3 ].co);
if(face[i].v4)
VECCOPY(co[3], vert[ face[i].v4 ].co);
-
+
BLI_bvhtree_insert(tree, i, co[0], face[i].v4 ? 4 : 3);
}
BLI_bvhtree_balance(tree);
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs