Представьте себе огромную трехмерную сетку (с точки зрения процедур и потенциально бесконечную, по крайней мере, 10^6 координат на каждую сторону). У каждой координаты сетки есть примитив (например, сфера, ящик или какая-либо другая простая, легко математически определенная функция).Пересечение вершин 3D-сетки
Мне нужен алгоритм для пересечения луча с началом вне сетки и направлением, входящим в него, против элементов сетки. I., луч может перемещаться на полпути через эту огромную сетку, а затем ударить примитива. Из-за объема сетки итеративный метод [EDIT: (например, марширование луча)] неприемлемо медленный. Мне нужна некоторая закрытая форма [EDIT: постоянное время] решение для поиска примитивного хита.
Один из возможных подходов я думал, чтобы определить количество луча бы сходиться каждый раз шаг к примитивам на каждом из восьми координат окружающей ячейки сетки в некотором модульном арифметическом пространстве в каждом из х, у , и z, затем делим на направление луча и занимаем наименьшее расстояние. У меня нет никаких доказательств, кроме интуиции, чтобы думать, что это может сработать, а Google бесполезен; «пересечение сетки» означает пересечение линий сетки лиц.
Примечание:
- Я действительно только заботиться о нормали к поверхности примитива (я мог бы легко найти, что дано расстояние до перекрестка, но я не забочусь о расстоянии такового).
- Тип примитивного пересечения не важен в этой точке. В идеале это была бы коробка. Второй выбор, сфера. Тем не менее, я предполагаю, что любой используемый алгоритм может быть обобщен для других примитивов, и если худшее приходит к худшему, в любом случае это не имеет особого значения для этого приложения.
Спасибо,
Ian
Вы случайно работаете на лучей? – Jasper
Вроде - я пытаюсь сделать визуализатор для очень больших чисел. Я пытаюсь написать фрагментарный шейдер, который, по существу, вычисляет эту сетку. – imallett
Насколько велики объекты в вершинах относительно размеров лиц? –