MCPcopy Create free account
hub / github.com/Meshcapade/difflocks / closest_point_barycentrics

Function closest_point_barycentrics

data_loader/mesh_utils.py:9–48  ·  view source on GitHub ↗

Given a 3D mesh and a set of query points, return closest point barycentrics Args: query_points: np.array (float) [Q, 3] query points mesh_verts: np.array (float) [N, 3] mesh vertices mesh_faces: np.array (int) [N, 3] mesh triangle indices Retu

(query_points, mesh_verts, mesh_faces)

Source from the content-addressed store, hash-verified

7
8
9def closest_point_barycentrics(query_points, mesh_verts, mesh_faces):
10 """Given a 3D mesh and a set of query points, return closest point barycentrics
11 Args:
12 query_points: np.array (float)
13 [Q, 3] query points
14 mesh_verts: np.array (float)
15 [N, 3] mesh vertices
16 mesh_faces: np.array (int)
17 [N, 3] mesh triangle indices
18 Returns:
19 Tuple[closest_points, barys, vertex_idxs, face_idxs]
20 closest_points: [Q, 3] approximated (closest) points on the mesh
21 barys: [Q, 3] barycentric weights that produce "approx"
22 vertex_idxs: [Q, 3] vertex indices for barycentric interpolation
23 face_idxs: [Q] face indices for barycentric interpolation. vertex_idxs = mesh_faces[face_idxs]
24 """
25 sqr_distances, face_idxs, closest_points = igl.point_mesh_squared_distance(query_points, mesh_verts, mesh_faces)
26
27 # if filtering:
28 # valid_q_idx = np.where(np.sqrt(sqr_distances) < filter_dis_thres)[0]
29 # p = p[valid_q_idx]
30 # face_idxs = face_idxs[valid_q_idx]
31 # else:
32 # valid_q_idx = np.arange(p.shape[0])
33
34
35 vertex_idxs = mesh_faces[face_idxs]
36 face_v0 = mesh_verts[vertex_idxs[:, 0]]
37 face_v1 = mesh_verts[vertex_idxs[:, 1]]
38 face_v2 = mesh_verts[vertex_idxs[:, 2]]
39
40 barys = igl.barycentric_coordinates_tri(closest_points, face_v0, face_v1, face_v2)
41
42 # #sanity check
43 # b0, b1, b2 = np.split(barys, 3, axis=1)
44 # approx = b0 * face_v0 + b1 * face_v1 + b2 * face_v2
45 # diff = closest_points-approx
46 # print("max diff",np.max(diff))
47
48 return closest_points, barys, vertex_idxs, face_idxs
49
50
51def compute_vertex_tbn(vertex_pos, vertex_uv, faces, eps=1e-5):

Callers 3

horizontally_flipFunction · 0.90
compute_tbnMethod · 0.85
compute_uv_space_dataFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected