В результат первых пересечений лучей с сеткой в trimesh попадают лишние результаты
При вычислении пересечения лучей с сеткой должны выделяться треугольники, на которые луч упал первым (когда между источником луча и треугольником нет других треугольников), но в результат также попадают и те треугольники, которые находятся на обратной стороне сферы.
Как избавиться от лишних результатов? Либо где допущена ошибка?
import trimesh
import numpy as np
mesh = trimesh.creation.icosphere(use_embree=True)
cam = np.array([[0, 0, -3]])
ray_origins = np.tile(cam, (len(mesh.vertices), 1))
ray_directions = mesh.vertices-np.tile(cam, (len(mesh.vertices), 1))
index_tri, index_ray = mesh.ray.intersects_id(
ray_origins=ray_origins,
ray_directions=ray_directions, multiple_hits=False)
ray_visualize = trimesh.load_path(np.hstack((ray_origins,
ray_origins + ray_directions*1.0)).reshape(-1, 2, 3))
mesh.visual.face_colors = [255,255,255,255]
mesh.visual.face_colors[index_tri] = [255, 0, 0, 255]
mesh.unmerge_vertices()
scene = trimesh.Scene([mesh, ray_visualize])
scene.show()
Догадка: Вероятно, лучи проходящие через вершины треугольников, могут не учесть вершину за часть треугольника, поэтому некоторые лучи идут сквозь треугольники. Если направить лучи не к вершинам треугольников, а к центрам треугольников, то получается хороший результат, но некоторые лучи все таки проходят дальше.
ray_origins = np.tile(cam, (len(mesh.triangles_center), 1))
ray_directions = mesh.triangles_center-np.tile(cam, (len(mesh.triangles_center), 1))