Вычисление расстояния от граничного поля, прохождение через вокселей и доступ к их соседям

Я работаю над проектом, который предполагает извлечение центральной линии из закрытого объекта. Я должен сделать следующие шаги обработки перед реализацией алгоритма извлечения центральной линии. Я новичок в openvdb, поэтому нужна помощь.

  1. Вокселизировать сетку.
  2. Вычислить расстояние от граничного поля для каждого вокселя.
  3. Итерировать по вокселям.
  4. Доступ 26 соседей воксела.

Моя попытка

  1. Шаг 1 и 2 — чтобы выполнить шаг 1 и шаг 2, я делаю следующее.
    а) Чтение волнового фронта объекта. Я написал специальную функцию для этого, которая заполняет векторы Vec3s, Vec3I и Vec4I.
    б) передать данные в следующую функцию, чтобы вычислить расстояние от граничного поля.

    GridType::Ptr meshToSignedDistanceField
    (   const openvdb::math::Transform &    xform,
    const std::vector< Vec3s > &    points,
    const std::vector< Vec3I > &    triangles,
    const std::vector< Vec4I > &    quads,
    float   exBandWidth,
    float   inBandWidth
    )
    

Я использую правильную функцию API для вычисления расстояния от граничного поля? Если так
Я не понимаю 5-й (float exBandWidth) и 6-й (float inBandWdth) аргументы. Некоторые указатели относительно них будут полезны.

  1. Теперь у меня есть расстояние от граничных полей, которые я перебираю по сетке, используя итераторы значений следующим образом

    for (openvdb::FloatGrid::ValueAllCIter iter = grid->cbeginValueAll(); iter.test(); ++iter) {
    float dist = iter.getValue();
    if (dist > 0.0) {
    std::cout << "exterior voxel" << std::endl;
    } else {
    std::cout << "interior voxel" << std::endl;
    }
    }
    

Мой первый вопрос: правильно ли я делаю этот шаг? Если так, то я также хочу получить доступ к 26 соседям для каждого вокселя. Как это сделать ??

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]