Треугольники - это поверхности с очень простым алгоритмом пересечения ray→triangle
, который можно выполнить несколькими операциями. По этой причине они часто используются в качестве примитивов для приложений трассировки лучей - сетка, например, аппроксимируется коллекцией треугольников. Проблема заключается в том, что чем более подробно приведена аппроксимация, тем больше треугольников вам нужно, что означает больше тестов. Если ваш объект является идеальной сферой, то использование треугольников может быть не очень хорошей идеей, так как существует алгоритм O (1), который может непосредственно тестировать пересечения ray→sphere
с несколькими операциями.Есть ли какой-либо алгоритм быстрого пересечения лучей?
Мой вопрос: что другие поверхности имеют это свойство «с более быстрым ray→surface
» пересечением, чем подход треугольной? Существует ли какая-либо математическая структура/объект, которая позволяет аппроксимировать поверхность произвольного трехмерного объекта и проверять его пересечение в O (1)?
Вы можете плитку вашей поверхности сплайнами или что-то в этом роде. Нахождение пересечения луча с пластырем сплайна занимает постоянное время, но это не обычная прогулка. – tmyklebu
Я думаю, что эллипсоиды или 3D-боксы проще, но не так точно вам нужно использовать простейшие объекты, которые наилучшим образом соответствуют вашей форме сетки. Может использовать любую форму геометрии, которая может быть представлена математической формулой для этого ... без знания формы (произвольная сетка) это сложно. Установка поверхности объекта очень медленная, но ее можно предварительно вычислить один раз, чтобы она не замедляла время работы ... – Spektre
непрерывные гладкие поверхности с простыми уравнениями. таких как эллипсоиды (и сферы) и плоскости, и цилиндрическая поверхность. Не угловые формы, такие как кубоиды (они O (количество граней)) –