c8e553e9532fb06d795900601c6a5e3afe7f3aad
DotsToSirface (Qt 5.11)
Демонстрационная программа на Qt 5.11 C++, которая:
- принимает массив 3D-точек
QVector<Point3f>; - строит массив треугольников
QVector<Triangle>; - визуализирует точки и полученную треугольную поверхность.
Вход/выход API
src/geometry/surface_reconstruction.h:
struct Point3f { float x, y, z; };struct Triangle { int i0, i1, i2; };QVector<Triangle> buildSurfaceTriangles(const QVector<Point3f>& points);
Triangle хранит индексы вершин в исходном массиве points.
Как это работает
Реализация использует инкрементальный Convex Hull 3D:
- удаление дубликатов точек (epsilon-сравнение);
- поиск стартового тетраэдра;
- поочередное добавление точек с пересчетом видимых граней и горизонта;
- поддержание ориентированных наружу треугольников.
Ограничения
Текущая реализация строит выпуклую оболочку облака точек. Для невыпуклых объектов и детальной реконструкции произвольной поверхности нужны более сложные алгоритмы (например, alpha-shapes, Poisson reconstruction и т.п.).
Сборка
Пример для Qt 5.11:
qmake DotsToSirface.pro
make
Для Windows/MSVC используйте соответствующий nmake/jom.
Демо
При запуске приложение:
- генерирует тестовое облако точек (приближенная сфера с небольшим шумом);
- строит триангуляцию;
- показывает статистику: количество точек, количество треугольников и время построения;
- отображает сцену в
QOpenGLWidget(ЛКМ - вращение, колесо - зум).
Languages
C++
31.8%
JavaScript
29.8%
Python
18.2%
Vue
13.9%
QML
4.7%
Other
1.5%