Как сгладить сетку, созданную Marching Cubes, в реальном времени?

Сейчас я использую алгоритм марширующих кубов для проекта (рендеринг человеческих зубов в реальном времени из изображений КТ). Вот результат рендеринга:

http://www.freeimagehosting.net/uploads/4c2e2c94be.jpg

Вы можете видеть, что сетка, сгенерированная MC, не такая гладкая. Ребята, вам известен какой-нибудь алгоритм сглаживания в реальном времени, который можно применить к выходу MC? Или есть улучшенная версия MC, которая может генерировать гладкую поверхность?

Обратите внимание, что алгоритм сглаживания должен быть быстрым, потому что позже мне придется использовать MC с частотой около 30 Гц для пересчета изоповерхности во время интерактивной деформации.


person Kevin Zheng    schedule 20.07.2010    source источник
comment
Кстати, Кевин, вы где-то публикуете результаты своей работы, возможно, в открытом доступе?   -  person Kos    schedule 02.12.2010
comment
Возможную альтернативу см. в этом ответе (который я так и не смог оценить): адаптивная неявная полигонизация поверхности"> stackoverflow.com/questions/3894283/   -  person ergosys    schedule 21.10.2011


Ответы (2)


подразделение Catmull-Clark — хороший алгоритм, который дает неплохие результаты для сглаживания . Вы можете применить его несколько раз.

Алгоритм довольно прост в реализации.

Насчет того, что это в реальном времени, до сих пор я реализовал его только статически, но, насколько мне известно, это абсолютно возможно реализовать как геометрический шейдер.

Также в Blender используется алгоритм сглаживания. Он не основан на подразделении (он не изменяет количество вершин или граней); он просто перемещает вершины, чтобы уменьшить углы между соседними вершинами. Опять же, должно быть возможно реализовать на GLSL, явно в реальном времени.

Эти два можно использовать вместе.

person Kos    schedule 02.12.2010

Просто чек. Если у вас есть дублированные вершины, пересчет нормалей не будет иметь эффекта сглаживания. Итак, убедитесь, что у вас нет дублированных вершин после алгоритма марширующего куба. У меня была такая же проблема, а потом я удалил дубликаты, теперь у меня гладкая сетка.

person user    schedule 13.05.2014