Как правильно рассчитать, если поверхность функции расстояния пересекает AABB для вокселизации - PullRequest
0 голосов
/ 22 сентября 2019

Я хочу создать разреженное воксельное октре (SVO) из заданной функции расстояния (DF).DF может быть точной или нижней границей (например, для фрактала Мандельбула) расстояния до поверхности для любой точки пространства.Разрешение (количество уровней) SVO является динамическим, то есть я продолжаю делить узлы по требованию, поэтому априори «максимального разрешения» не существует.Моя проблема в том, что я не понимаю, как вычислить, действительно ли поверхность DF пересекается с данным AABB (кубом).Обычный способ из того, что я прочитал, кажется, состоит в том, чтобы запросить DF для центра AABB и проверить, меньше ли расстояние, чем расстояние до каждого угла AABB.Однако это приводит к появлению артефактов из-за ложных срабатываний, и при переходе на следующий уровень ни один из дочерних элементов не будет содержать поверхность в пределах своего радиуса.Это относится даже к точным DF, не говоря уже о DF, которые предоставляют только нижнюю границу расстояния ...

Я привел пример: Пример

Здесь зеленый материал - это поверхность, представленная DF.Черные квадраты - это мои SVO-узлы (2 уровня), а оранжевые (уровень 1) и красные (уровень 2) круги - пороговые значения расстояния (от центра до угла) каждого узла.В примере, который вы видите, поверхность будет ошибочно считаться «внутри» квадрата уровня 1, но не будет находиться внутри любого из квадратов уровня 2.

Как я могу исправить это поведение?и получить точный тест пересечения?

Приветствия.

...