В результат первых пересечений лучей с сеткой в 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))

введите сюда описание изображения


Ответы (0 шт):