Я предполагаю, что у вас есть луч d = (dx, dy, dz), начинающийся с o = (ox, oy, oz), и вы находите параметр t такой, что точка пересечения p = o + d * t , (Как и эта страница , которая описывает пересечение плоскости луча с использованием P2-P1 для d, P1 для o и u для t)
Первый вопрос, который я хотел бы задать, - "Пересекаются ли эти объекты"?
Если нет, то вы можете немного обмануть и проверить по порядку столкновения лучей. Поскольку у вас есть три объекта, которые могут перемещаться или не перемещаться за кадр, стоит предварительно рассчитать их расстояние от камеры (например, от их центральных точек). Проверяйте каждый объект по очереди на расстоянии от камеры от наименьшего к наибольшему. Хотя пустое пространство является самой дорогой частью рендеринга в настоящее время, это более эффективно, чем просто тестирование по всем трем и принятие минимального значения. Если у вашего изображения высокое разрешение, это особенно эффективно, поскольку вы амортизируете стоимость по количеству пикселей.
В противном случае проверить все три и принять минимальное значение ...
В других ситуациях вы можете захотеть сделать гибрид этих двух методов. Если вы можете проверить два объекта по порядку, то сделайте это (например, сфера и куб, движущийся по цилиндрическому туннелю), но проверьте третий и возьмите минимальное значение, чтобы найти конечный объект.