[Bf-blender-cvs] [9b92c8c] mesh-transfer-data: Fix previous stupid commit about bvh precision! What we want here is ray radius, not bvh creation epsilon.
Bastien Montagne
noreply at git.blender.org
Wed Oct 15 21:37:20 CEST 2014
Commit: 9b92c8c2f7d4378bd1c1afefb5c6aea89665796a
Author: Bastien Montagne
Date: Wed Oct 15 16:39:57 2014 +0200
Branches: mesh-transfer-data
https://developer.blender.org/rB9b92c8c2f7d4378bd1c1afefb5c6aea89665796a
Fix previous stupid commit about bvh precision! What we want here is ray radius, not
bvh creation epsilon.
===================================================================
M source/blender/blenkernel/BKE_mesh_mapping.h
M source/blender/blenkernel/intern/mesh_mapping.c
M source/blender/editors/object/object_transfer_data.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_mesh_mapping.h b/source/blender/blenkernel/BKE_mesh_mapping.h
index dd2c5ae..a4e25f2 100644
--- a/source/blender/blenkernel/BKE_mesh_mapping.h
+++ b/source/blender/blenkernel/BKE_mesh_mapping.h
@@ -279,23 +279,23 @@ enum {
/* TODO add mesh2mesh versions (we'll need mesh versions of bvhtree funcs too, though!). */
void BKE_dm2mesh_mapping_verts_compute(
- const int mode, const struct SpaceTransform *space_transform, const float max_dist, const float bvh_epsilon,
+ const int mode, const struct SpaceTransform *space_transform, const float max_dist, const float ray_radius,
const struct MVert *verts_dst, const int numverts_dst,
struct DerivedMesh *dm_src, Mesh2MeshMapping *r_map);
void BKE_dm2mesh_mapping_edges_compute(
- const int mode, const struct SpaceTransform *space_transform, const float max_dist, const float bvh_epsilon,
+ const int mode, const struct SpaceTransform *space_transform, const float max_dist, const float ray_radius,
const struct MVert *verts_dst, const int numverts_dst, const struct MEdge *edges_dst, const int numedges_dst,
struct DerivedMesh *dm_src, Mesh2MeshMapping *r_map);
void BKE_dm2mesh_mapping_polys_compute(
- const int mode, const struct SpaceTransform *space_transform, const float max_dist, const float bvh_epsilon,
+ const int mode, const struct SpaceTransform *space_transform, const float max_dist, const float ray_radius,
struct MVert *verts_dst, const int numverts_dst, struct MPoly *polys_dst, const int numpolys_dst,
struct MLoop *loops_dst, const int numloops_dst, struct CustomData *pdata_dst, struct DerivedMesh *dm_src,
struct Mesh2MeshMapping *r_map);
void BKE_dm2mesh_mapping_loops_compute(
- const int mode, const struct SpaceTransform *space_transform, const float max_dist, const float bvh_epsilon,
+ const int mode, const struct SpaceTransform *space_transform, const float max_dist, const float ray_radius,
struct MVert *verts_dst, const int numverts_dst, struct MEdge *edges_dst, const int numedges_dst,
struct MPoly *polys_dst, const int numpolys_dst, struct MLoop *loops_dst, const int numloops_dst,
struct CustomData *pdata_dst, struct CustomData *ldata_dst, const float split_angle_dst,
diff --git a/source/blender/blenkernel/intern/mesh_mapping.c b/source/blender/blenkernel/intern/mesh_mapping.c
index 082b8d0..9a46dc5 100644
--- a/source/blender/blenkernel/intern/mesh_mapping.c
+++ b/source/blender/blenkernel/intern/mesh_mapping.c
@@ -847,7 +847,7 @@ static float bke_mesh2mesh_bvhtree_query_raycast(
}
void BKE_dm2mesh_mapping_verts_compute(
- const int mode, const SpaceTransform *space_transform, const float max_dist, const float bvh_epsilon,
+ const int mode, const SpaceTransform *space_transform, const float max_dist, const float ray_radius,
const MVert *verts_dst, const int numverts_dst, DerivedMesh *dm_src,
Mesh2MeshMapping *r_map)
{
@@ -872,7 +872,7 @@ void BKE_dm2mesh_mapping_verts_compute(
float hitdist;
if (mode == M2MMAP_MODE_VERT_NEAREST) {
- bvhtree_from_mesh_verts(&treedata, dm_src, bvh_epsilon, 2, 6);
+ bvhtree_from_mesh_verts(&treedata, dm_src, 0.0f, 2, 6);
nearest.index = -1;
for (i = 0; i < numverts_dst; i++) {
@@ -897,7 +897,7 @@ void BKE_dm2mesh_mapping_verts_compute(
float (*vcos_src)[3] = MEM_mallocN(sizeof(*vcos_src) * (size_t)dm_src->getNumVerts(dm_src), __func__);
dm_src->getVertCos(dm_src, vcos_src);
- bvhtree_from_mesh_edges(&treedata, dm_src, bvh_epsilon, 2, 6);
+ bvhtree_from_mesh_edges(&treedata, dm_src, 0.0f, 2, 6);
nearest.index = -1;
for (i = 0; i < numverts_dst; i++) {
@@ -956,20 +956,19 @@ void BKE_dm2mesh_mapping_verts_compute(
float *weights = MEM_mallocN(sizeof(*weights) * tmp_buff_size, __func__);
dm_src->getVertCos(dm_src, vcos_src);
- bvhtree_from_mesh_faces(&treedata, dm_src, bvh_epsilon, 2, 6);
+ bvhtree_from_mesh_faces(&treedata, dm_src, 0.0f, 2, 6);
/* bvhtree here uses tesselated faces... */
orig_poly_idx_src = dm_src->getTessFaceDataArray(dm_src, CD_ORIGINDEX);
if (mode == M2MMAP_MODE_VERT_POLYINTERP_VNORPROJ) {
for (i = 0; i < numverts_dst; i++) {
float tmp_co[3], tmp_no[3];
- const float radius = 1.0e-6f;
copy_v3_v3(tmp_co, verts_dst[i].co);
normal_short_to_float_v3(tmp_no, verts_dst[i].no);
hitdist = bke_mesh2mesh_bvhtree_query_raycast(&treedata, &rayhit, space_transform,
- tmp_co, tmp_no, radius, max_dist);
+ tmp_co, tmp_no, ray_radius, max_dist);
if (rayhit.index >= 0 && hitdist <= max_dist) {
MPoly *mp_src = &polys_src[orig_poly_idx_src[rayhit.index]];
@@ -1041,7 +1040,7 @@ void BKE_dm2mesh_mapping_verts_compute(
/* TODO: all those 'nearest' edge computations could be hugely enhanced, not top priority though. */
void BKE_dm2mesh_mapping_edges_compute(
- const int mode, const SpaceTransform *space_transform, const float max_dist, const float bvh_epsilon,
+ const int mode, const SpaceTransform *space_transform, const float max_dist, const float ray_radius,
const MVert *verts_dst, const int numverts_dst, const MEdge *edges_dst, const int numedges_dst,
DerivedMesh *dm_src, Mesh2MeshMapping *r_map)
{
@@ -1062,6 +1061,7 @@ void BKE_dm2mesh_mapping_edges_compute(
else {
BVHTreeFromMesh treedata = {NULL};
BVHTreeNearest nearest = {0};
+ BVHTreeRayHit rayhit = {0};
float hitdist;
if (mode == M2MMAP_MODE_EDGE_VERT_NEAREST) {
@@ -1082,7 +1082,7 @@ void BKE_dm2mesh_mapping_edges_compute(
dm_src->getVertCos(dm_src, vcos_src);
- bvhtree_from_mesh_verts(&treedata, dm_src, bvh_epsilon, 2, 6);
+ bvhtree_from_mesh_verts(&treedata, dm_src, 0.0f, 2, 6);
nearest.index = -1;
for (i = 0; i < numedges_dst; i++) {
@@ -1181,7 +1181,7 @@ void BKE_dm2mesh_mapping_edges_compute(
MEM_freeN(vert2edge_src_map_mem);
}
else if (mode == M2MMAP_MODE_EDGE_NEAREST) {
- bvhtree_from_mesh_edges(&treedata, dm_src, bvh_epsilon, 2, 6);
+ bvhtree_from_mesh_edges(&treedata, dm_src, 0.0f, 2, 6);
nearest.index = -1;
for (i = 0; i < numedges_dst; i++) {
@@ -1209,7 +1209,7 @@ void BKE_dm2mesh_mapping_edges_compute(
int *orig_poly_idx_src;
dm_src->getVertCos(dm_src, vcos_src);
- bvhtree_from_mesh_faces(&treedata, dm_src, bvh_epsilon, 2, 6);
+ bvhtree_from_mesh_faces(&treedata, dm_src, 0.0f, 2, 6);
/* bvhtree here uses tesselated faces... */
orig_poly_idx_src = dm_src->getTessFaceDataArray(dm_src, CD_ORIGINDEX);
@@ -1264,7 +1264,7 @@ void BKE_dm2mesh_mapping_edges_compute(
}
void BKE_dm2mesh_mapping_polys_compute(
- const int mode, const SpaceTransform *space_transform, const float max_dist, const float bvh_epsilon,
+ const int mode, const SpaceTransform *space_transform, const float max_dist, const float ray_radius,
MVert *verts_dst, const int numverts_dst, MPoly *polys_dst, const int numpolys_dst,
MLoop *loops_dst, const int numloops_dst, CustomData *pdata_dst, DerivedMesh *dm_src,
Mesh2MeshMapping *r_map)
@@ -1303,7 +1303,7 @@ void BKE_dm2mesh_mapping_polys_compute(
int *orig_poly_idx_src;
- bvhtree_from_mesh_faces(&treedata, dm_src, bvh_epsilon, 2, 6);
+ bvhtree_from_mesh_faces(&treedata, dm_src, 0.0f, 2, 6);
/* bvhtree here uses tesselated faces... */
orig_poly_idx_src = dm_src->getTessFaceDataArray(dm_src, CD_ORIGINDEX);
@@ -1478,7 +1478,7 @@ void BKE_dm2mesh_mapping_polys_compute(
}
void BKE_dm2mesh_mapping_loops_compute(
- const int mode, const SpaceTransform *space_transform, const float max_dist, const float bvh_epsilon,
+ const int mode, const SpaceTransform *space_transform, const float max_dist, const float ray_radius,
MVert *verts_dst, const int numverts_dst, MEdge *edges_dst, const int numedges_dst,
MPoly *polys_dst, const int numpolys_dst, MLoop *loops_dst, const int numloops_dst,
CustomData *pdata_dst, CustomData *ldata_dst, const float split_angle_dst,
@@ -1645,7 +1645,7 @@ void BKE_dm2mesh_mapping_loops_compute(
}
/* verts 'ownership' is transfered to treedata here, which will handle its freeing. */
bvhtree_from_mesh_verts_ex(&treedata[tidx], verts_src, num_verts_src, verts_allocated_src,
- verts_active, num_verts_active, bvh_epsilon, 2, 6);
+ verts_active, num_verts_active, 0.0f, 2, 6);
if (verts_allocated_src) {
verts_allocated_src = false; /* Only 'give' our verts once, to first tree! */
}
@@ -1655,7 +1655,7 @@ void BKE_dm2mesh_mapping_loops_compute(
}
else {
BLI_assert(num_trees == 1);
- bvhtree_from_mesh_verts(&treedata[0], dm_src, bvh_epsilon, 2, 6);
+ bvhtree_from_mesh_verts(&treedata[0], dm_src, 0.0f, 2, 6);
}
}
else { /* We use polygons. */
@@ -1690,7 +1690,7 @@ void BKE_dm2mesh_mapping_loops_compute(
/* verts 'ownership' is transfered to treedata here, which will handle its freeing. */
bvhtree_from_mesh_faces_ex(&treedata[tidx], verts_src, verts_allocated_src,
faces_src, num_faces_src, faces_allocated_src,
- faces_active, num_faces_active, bvh_epsilon, 2, 6);
+ faces_active, num_faces_active, 0.0f, 2, 6);
if (verts_allocated_src) {
verts_allocated_src = false; /* Only 'give' our verts once, to first tree! */
}
@@ -1703,7 +1703,7 @@ void BKE_dm2mesh_mapping_loops_compute(
}
else {
BLI_assert(num_tress == 1);
- bvhtree_from_mesh_faces(&treedata[0], dm_src, bvh_epsilon, 2, 6);
+ bvhtree_from_mesh_faces(&treedata[0], dm_src, 0.0f, 2, 6);
orig_poly_idx_src = dm_src->getTessFaceDataArray(dm_src, CD_ORIGINDEX);
}
}
@@ -1794,13 +1794,12 @@ void BKE_dm2mesh_mapping_loops_compute(
}
else if (mode & M2MMAP_USE_NORPROJ) {
float tmp_co[3], tmp_no[3];
- const float radius = 1.0e-6f;
copy_v3_v3(tmp_co,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list