2015-06-02 1 views
2

Треугольники - это поверхности с очень простым алгоритмом пересечения ray→triangle, который можно выполнить несколькими операциями. По этой причине они часто используются в качестве примитивов для приложений трассировки лучей - сетка, например, аппроксимируется коллекцией треугольников. Проблема заключается в том, что чем более подробно приведена аппроксимация, тем больше треугольников вам нужно, что означает больше тестов. Если ваш объект является идеальной сферой, то использование треугольников может быть не очень хорошей идеей, так как существует алгоритм O (1), который может непосредственно тестировать пересечения ray→sphere с несколькими операциями.Есть ли какой-либо алгоритм быстрого пересечения лучей?

Мой вопрос: что другие поверхности имеют это свойство «с более быстрым ray→surface» пересечением, чем подход треугольной? Существует ли какая-либо математическая структура/объект, которая позволяет аппроксимировать поверхность произвольного трехмерного объекта и проверять его пересечение в O (1)?

+0

Вы можете плитку вашей поверхности сплайнами или что-то в этом роде. Нахождение пересечения луча с пластырем сплайна занимает постоянное время, но это не обычная прогулка. – tmyklebu

+0

Я думаю, что эллипсоиды или 3D-боксы проще, но не так точно вам нужно использовать простейшие объекты, которые наилучшим образом соответствуют вашей форме сетки. Может использовать любую форму геометрии, которая может быть представлена ​​математической формулой для этого ... без знания формы (произвольная сетка) это сложно. Установка поверхности объекта очень медленная, но ее можно предварительно вычислить один раз, чтобы она не замедляла время работы ... – Spektre

+1

непрерывные гладкие поверхности с простыми уравнениями. таких как эллипсоиды (и сферы) и плоскости, и цилиндрическая поверхность. Не угловые формы, такие как кубоиды (они O (количество граней)) –

ответ

1

Какое знание у вас будет иметь свою форму? - чистая закрытая форма: некоторые из них имеют близкие решения. - если это всего лишь треугольный суп, вам нужна некоторая структура данных для ускорения: например. сетки, осциллы, иерархию ограничивающих прямоугольников, BSP ... - если вы можете выразить потенциальную или дистанционную функцию - даже приблизительную - такую ​​как неявная поверхность, вы можете использовать дихотомию, чтобы получить пересечение (итерации довольно быстрые).

(Или вы можете присоединиться к сообществу SparseVoxels, но это еще одна история ;-)).

 Смежные вопросы

  • Нет связанных вопросов^_^