Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-04-20 20:29:37 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-04-20 20:29:37 +0400
commit106d41699aaa94ed8917c44c6f18a71f8a25e7a3 (patch)
tree39c1475986457353bfb47859aa39d64420135727 /source/blender/blenkernel/intern/editderivedmesh.c
parentb0f8ece9d9da513ca6a52471a11258ce7ae090b7 (diff)
fix [#35025] Mesh Debug samples strange behavior
Diffstat (limited to 'source/blender/blenkernel/intern/editderivedmesh.c')
-rw-r--r--source/blender/blenkernel/intern/editderivedmesh.c32
1 files changed, 18 insertions, 14 deletions
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c
index 6b88b9779d9..cd4844fbc68 100644
--- a/source/blender/blenkernel/intern/editderivedmesh.c
+++ b/source/blender/blenkernel/intern/editderivedmesh.c
@@ -1681,32 +1681,36 @@ static void statvis_calc_thickness(
normal_tri_v3(ray_no, cos[2], cos[1], cos[0]);
+#define FACE_RAY_TEST_ANGLE \
+ f_hit = BKE_bmbvh_ray_cast(bmtree, ray_co, ray_no, \
+ &dist, NULL, NULL); \
+ if (f_hit) { \
+ float angle_fac = fabsf(dot_v3v3(ltri[0]->f->no, f_hit->no)); \
+ angle_fac = 1.0f - angle_fac; \
+ angle_fac = angle_fac * angle_fac * angle_fac; \
+ angle_fac = 1.0f - angle_fac; \
+ dist /= angle_fac; \
+ if (dist < face_dists[index]) { \
+ face_dists[index] = dist; \
+ } \
+ } (void)0
+
if (use_jit) {
int j;
for (j = 0; j < samples; j++) {
+ float dist = face_dists[index];
interp_v3_v3v3v3_uv(ray_co, cos[0], cos[1], cos[2], jit_ofs[j]);
madd_v3_v3fl(ray_co, ray_no, eps_offset);
- f_hit = BKE_bmbvh_ray_cast(bmtree, ray_co, ray_no,
- &face_dists[index], NULL, NULL);
- /* duplicate */
- if (f_hit) {
- const int index_hit = BM_elem_index_get(f_hit);
- face_dists[index] = face_dists[index_hit] = min_ff(face_dists[index], face_dists[index_hit]);
- }
+ FACE_RAY_TEST_ANGLE;
}
}
else {
+ float dist = face_dists[index];
mid_v3_v3v3v3(ray_co, cos[0], cos[1], cos[2]);
madd_v3_v3fl(ray_co, ray_no, eps_offset);
- f_hit = BKE_bmbvh_ray_cast(bmtree, ray_co, ray_no,
- &face_dists[index], NULL, NULL);
- /* duplicate */
- if (f_hit) {
- const int index_hit = BM_elem_index_get(f_hit);
- face_dists[index] = face_dists[index_hit] = min_ff(face_dists[index], face_dists[index_hit]);
- }
+ FACE_RAY_TEST_ANGLE;
}
}