Я работаю над проектом, который предполагает извлечение центральной линии из закрытого объекта. Я должен сделать следующие шаги обработки перед реализацией алгоритма извлечения центральной линии. Я новичок в openvdb, поэтому нужна помощь.
Моя попытка
Шаг 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) аргументы. Некоторые указатели относительно них будут полезны.
Теперь у меня есть расстояние от граничных полей, которые я перебираю по сетке, используя итераторы значений следующим образом
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 соседям для каждого вокселя. Как это сделать ??
Задача ещё не решена.
Других решений пока нет …