Угол 90 с алгоритмом марширующих кубов - интерполирующая функция - PullRequest
0 голосов
/ 09 июля 2019

Я использую алгоритм Marching Cubes . Допустим, у меня есть 3D-изображение, похожее на этот рисунок картинка . Когда я использую алгоритм MC, я получаю что-то вроде этого: эффект

Везде, где угол составляет ~ 90 градусов. Алгоритм MC также приближает эти элементы (это следует из интерполяционной функции, но меня особенно интересует отключение приближение везде, где угол ~ 90 градусов).

Таким образом, вместо , что , я хочу что-то вроде это (но только там, где угол ~ 90, везде, где я ожидаю, нормальное приближение (классика из алгоритма MC).

Текущая интерполирующая функция

Я использовал Функция расстояния со знаком (SDF).

Vector3 interpolate(Vector3 v1, Vector3 v2, float sdf1, float sdf2)
{
    float offset;
    float d = sdf2-sdf1;
    if(fabs(delta) < 1e-5)
    {
        offset = 0.5;
    }else
    {
        offset = (1e-5 - sdf1)/delta
    }

    return Vector3(v1+offset*(v2-v1));
}

Возможное решение

Одним из решений является установка меньшего размера для кубов (вокселей). Но я не могу сделать это из-за производительности. Поэтому я думаю, что ключ - это интерполирующая функция.

...