[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