Fix T75968: PBVH raycast returns wrong active vertex
nearest_vertex_co was not reset when a new triangle was intersected by the ray, so it was always returning the closest vertex to the real cursor position in any triangle, which was not always the triangle under the cursor. Reviewed By: sergey Maniphest Tasks: T75968 Differential Revision: https://developer.blender.org/D7485
This commit is contained in:
parent
50ef801a79
commit
bf0a554114
Notes:
blender-bot
2023-02-14 06:17:17 +01:00
Referenced by issue #75968, Sculpt Mode active vertex precision issues
|
@ -2155,7 +2155,11 @@ static bool pbvh_faces_node_raycast(PBVH *bvh,
|
|||
float location[3] = {0.0f};
|
||||
madd_v3_v3v3fl(location, ray_start, ray_normal, *depth);
|
||||
for (int j = 0; j < 3; j++) {
|
||||
if (len_squared_v3v3(location, co[j]) < len_squared_v3v3(location, nearest_vertex_co)) {
|
||||
/* Always assign nearest_vertex_co in the first iteration to avoid comparison against
|
||||
* uninitialized values. This stores the closest vertex in the current intersecting
|
||||
* triangle. */
|
||||
if (j == 0 ||
|
||||
len_squared_v3v3(location, co[j]) < len_squared_v3v3(location, nearest_vertex_co)) {
|
||||
copy_v3_v3(nearest_vertex_co, co[j]);
|
||||
*r_active_vertex_index = mloop[lt->tri[j]].v;
|
||||
*r_active_face_index = lt->poly;
|
||||
|
@ -2235,8 +2239,11 @@ static bool pbvh_grids_node_raycast(PBVH *bvh,
|
|||
const int y_it[4] = {0, 0, 1, 1};
|
||||
|
||||
for (int j = 0; j < 4; j++) {
|
||||
if (len_squared_v3v3(location, co[j]) <
|
||||
len_squared_v3v3(location, nearest_vertex_co)) {
|
||||
/* Always assign nearest_vertex_co in the first iteration to avoid comparison against
|
||||
* uninitialized values. This stores the closest vertex in the current intersecting
|
||||
* quad. */
|
||||
if (j == 0 || len_squared_v3v3(location, co[j]) <
|
||||
len_squared_v3v3(location, nearest_vertex_co)) {
|
||||
copy_v3_v3(nearest_vertex_co, co[j]);
|
||||
|
||||
*r_active_vertex_index = gridkey->grid_area * grid_index +
|
||||
|
|
Loading…
Reference in New Issue