[Bf-blender-cvs] [7118711] mathutils_bvhtree: Merge branch 'master' into mathutils_bvhtree
Campbell Barton
noreply at git.blender.org
Tue Jul 28 03:04:09 CEST 2015
Commit: 71187111c6c8c45c1ab1bb73b648c1a74497c8a0
Author: Campbell Barton
Date: Tue Jul 28 10:58:54 2015 +1000
Branches: mathutils_bvhtree
https://developer.blender.org/rB71187111c6c8c45c1ab1bb73b648c1a74497c8a0
Merge branch 'master' into mathutils_bvhtree
===================================================================
===================================================================
diff --cc source/blender/blenkernel/BKE_bvhutils.h
index 8109f46,d8eaa35..18eda63
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@@ -97,14 -119,17 +119,20 @@@ BVHTree *bvhtree_from_mesh_looptri_ex
*/
void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data);
- /*
+ /**
* Math functions used by callbacks
*/
- float bvhtree_ray_tri_intersection(const BVHTreeRay *ray, const float m_dist, const float v0[3], const float v1[3], const float v2[3]);
- float bvhtree_sphereray_tri_intersection(const BVHTreeRay *ray, float radius, const float m_dist, const float v0[3], const float v1[3], const float v2[3]);
- float nearest_point_in_tri_surface_squared(const float v0[3], const float v1[3], const float v2[3], const float p[3], int *v, int *e, float nearest[3]);
-
- /*
+ float bvhtree_ray_tri_intersection(
+ const BVHTreeRay *ray, const float m_dist,
+ const float v0[3], const float v1[3], const float v2[3]);
++float bvhtree_sphereray_tri_intersection(
++ const BVHTreeRay *ray, float radius, const float m_dist,
++ const float v0[3], const float v1[3], const float v2[3]);
+ float nearest_point_in_tri_surface_squared(
+ const float v0[3], const float v1[3], const float v2[3],
+ const float p[3], int *v, int *e, float nearest[3]);
+
+ /**
* BVHCache
*/
diff --cc source/blender/blenkernel/intern/bvhutils.c
index 2213869,a7a9dc1..6131153
--- a/source/blender/blenkernel/intern/bvhutils.c
+++ b/source/blender/blenkernel/intern/bvhutils.c
@@@ -60,7 -66,9 +66,9 @@@ float bvhtree_ray_tri_intersection
return FLT_MAX;
}
- float bvhtree_sphereray_tri_intersection(const BVHTreeRay *ray, float radius, const float m_dist, const float v0[3], const float v1[3], const float v2[3])
-static float sphereray_tri_intersection(
++float bvhtree_sphereray_tri_intersection(
+ const BVHTreeRay *ray, float radius, const float m_dist,
+ const float v0[3], const float v1[3], const float v2[3])
{
float idist;
@@@ -182,6 -213,32 +213,32 @@@ static void mesh_faces_spherecast(void
} while (t2);
}
+ /* copy of function above */
+ static void mesh_looptri_spherecast(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
+ {
+ const BVHTreeFromMesh *data = (BVHTreeFromMesh *) userdata;
+ const MVert *vert = data->vert;
+ const MLoopTri *lt = &data->looptri[index];
+ const float *vtri_co[3] = {
+ vert[data->loop[lt->tri[0]].v].co,
+ vert[data->loop[lt->tri[1]].v].co,
+ vert[data->loop[lt->tri[2]].v].co,
+ };
+ float dist;
+
+ if (data->sphere_radius == 0.0f)
+ dist = bvhtree_ray_tri_intersection(ray, hit->dist, UNPACK3(vtri_co));
+ else
- dist = sphereray_tri_intersection(ray, data->sphere_radius, hit->dist, UNPACK3(vtri_co));
++ dist = bvhtree_sphereray_tri_intersection(ray, data->sphere_radius, hit->dist, UNPACK3(vtri_co));
+
+ if (dist >= 0 && dist < hit->dist) {
+ hit->index = index;
+ hit->dist = dist;
+ madd_v3_v3v3fl(hit->co, ray->origin, ray->direction, dist);
+
+ normal_tri_v3(hit->no, UNPACK3(vtri_co));
+ }
+ }
/* copy of function above (warning, should de-duplicate with editmesh_bvh.c) */
static void editmesh_faces_spherecast(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
{
More information about the Bf-blender-cvs
mailing list