forked from bartvdbraak/blender
Expose bvhtree_sphereray_tri_intersection for general use
This commit is contained in:
parent
8e9534a850
commit
ba32d9d4cd
@ -125,6 +125,9 @@ void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data);
|
|||||||
float bvhtree_ray_tri_intersection(
|
float bvhtree_ray_tri_intersection(
|
||||||
const BVHTreeRay *ray, const float m_dist,
|
const BVHTreeRay *ray, const float m_dist,
|
||||||
const float v0[3], const float v1[3], const float v2[3]);
|
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(
|
float nearest_point_in_tri_surface_squared(
|
||||||
const float v0[3], const float v1[3], const float v2[3],
|
const float v0[3], const float v1[3], const float v2[3],
|
||||||
const float p[3], int *v, int *e, float nearest[3]);
|
const float p[3], int *v, int *e, float nearest[3]);
|
||||||
|
@ -66,7 +66,7 @@ float bvhtree_ray_tri_intersection(
|
|||||||
return FLT_MAX;
|
return FLT_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float sphereray_tri_intersection(
|
float bvhtree_sphereray_tri_intersection(
|
||||||
const BVHTreeRay *ray, float radius, const float m_dist,
|
const BVHTreeRay *ray, float radius, const float m_dist,
|
||||||
const float v0[3], const float v1[3], const float v2[3])
|
const float v0[3], const float v1[3], const float v2[3])
|
||||||
{
|
{
|
||||||
@ -194,7 +194,7 @@ static void mesh_faces_spherecast(void *userdata, int index, const BVHTreeRay *r
|
|||||||
if (data->sphere_radius == 0.0f)
|
if (data->sphere_radius == 0.0f)
|
||||||
dist = bvhtree_ray_tri_intersection(ray, hit->dist, t0, t1, t2);
|
dist = bvhtree_ray_tri_intersection(ray, hit->dist, t0, t1, t2);
|
||||||
else
|
else
|
||||||
dist = sphereray_tri_intersection(ray, data->sphere_radius, hit->dist, t0, t1, t2);
|
dist = bvhtree_sphereray_tri_intersection(ray, data->sphere_radius, hit->dist, t0, t1, t2);
|
||||||
|
|
||||||
if (dist >= 0 && dist < hit->dist) {
|
if (dist >= 0 && dist < hit->dist) {
|
||||||
hit->index = index;
|
hit->index = index;
|
||||||
@ -229,7 +229,7 @@ static void mesh_looptri_spherecast(void *userdata, int index, const BVHTreeRay
|
|||||||
if (data->sphere_radius == 0.0f)
|
if (data->sphere_radius == 0.0f)
|
||||||
dist = bvhtree_ray_tri_intersection(ray, hit->dist, UNPACK3(vtri_co));
|
dist = bvhtree_ray_tri_intersection(ray, hit->dist, UNPACK3(vtri_co));
|
||||||
else
|
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) {
|
if (dist >= 0 && dist < hit->dist) {
|
||||||
hit->index = index;
|
hit->index = index;
|
||||||
@ -257,7 +257,7 @@ static void editmesh_faces_spherecast(void *userdata, int index, const BVHTreeRa
|
|||||||
if (data->sphere_radius == 0.0f)
|
if (data->sphere_radius == 0.0f)
|
||||||
dist = bvhtree_ray_tri_intersection(ray, hit->dist, t0, t1, t2);
|
dist = bvhtree_ray_tri_intersection(ray, hit->dist, t0, t1, t2);
|
||||||
else
|
else
|
||||||
dist = sphereray_tri_intersection(ray, data->sphere_radius, hit->dist, t0, t1, t2);
|
dist = bvhtree_sphereray_tri_intersection(ray, data->sphere_radius, hit->dist, t0, t1, t2);
|
||||||
|
|
||||||
if (dist >= 0 && dist < hit->dist) {
|
if (dist >= 0 && dist < hit->dist) {
|
||||||
hit->index = index;
|
hit->index = index;
|
||||||
|
Loading…
Reference in New Issue
Block a user