[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16025] trunk/blender/source/blender/ blenkernel/intern/bvhutils.c: Fixing point-face distance to support degenerated tris/quads with area< FLT_EPSILON
Daniel Genrich
daniel.genrich at gmx.net
Fri Aug 8 16:24:48 CEST 2008
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);
More information about the Bf-blender-cvs
mailing list