12345678910111213141516171819202122232425262728293031323334353637 |
- import trimesh
- import numpy as np
- from vedo import show, settings
- settings.use_depth_peeling = True
- # test on a sphere mesh
- mesh = trimesh.creation.icosphere()
- # create some rays
- ray_origins = np.array([[0, 0, -3], [1, 2, -3]])
- ray_directions = np.array([[0, 0, 1], [0, -1, 1]])
- # run the mesh-ray query
- locations, index_ray, index_tri = mesh.ray.intersects_location(
- ray_origins=ray_origins, ray_directions=ray_directions
- )
- locs = trimesh.points.PointCloud(locations)
- # stack rays into line segments for visualization as Path3D
- ray_visualize = trimesh.load_path(
- np.hstack((ray_origins, ray_origins + ray_directions)).reshape(-1, 2, 3)
- )
- print("The rays hit the mesh at coordinates:\n", locations)
- print(f"The rays with index: {index_ray} hit triangles stored at mesh.faces[{index_tri}]")
- # stack rays into line segments for visualization as Path3D
- ray_visualize = trimesh.load_path(
- np.hstack((ray_origins, ray_origins + ray_directions * 5.0)).reshape(-1, 2, 3)
- )
- # make mesh white-ish
- mesh.visual.face_colors = [200, 200, 250, 100]
- mesh.visual.face_colors[index_tri] = [255, 0, 0, 255]
- show(mesh, ray_visualize, locs, axes=1).close()
|