ݺߣ

ݺߣShare a Scribd company logo
Изучение проблемы: перенос Си++
библиотек для работы с облаками
точек итриангулированными сетками
на 64-битную платформу
Автор: Евгений Рыжков

Дата: 15.01.2009


Аннотация
Итальянская компания E.G.S. S.r.l. занимается разработкой решений в области моделирования
трехмерных объектов на базе триангулированных сеток.


Введение
Итальянская компания E.G.S. S.r.l. занимается разработкой решений в области моделирования
трехмерных объектов на базе триангулированных сеток.




Для этой цели она использует собственную библиотеку компонентов Leios Components. Когда
компании E.G.S. S.r.l. понадобилось выпустить 64-битную версию своих компонентов, она
обратилась к ООО "СиПроВер" как к компании, специализирующейся на разработке анализаторов
кода для 64-битных и параллельных приложений.
Библиотека компонентов Leios Components




Библиотека компонентов Leios Components представляет собой набор различных библиотек:

   1. Программный интерфейс для работы с облаками точек и триангулированными сетками.
   2. Библиотека подгонки поверхностей.
   3. Библиотека для обработки граней и ребер.

Общий объем исходного кода составляет 13 мегабайт (440 000 строк кода), решение состоит из
нескольких десятков проектов. Очевидно, что перенос такого объема кода на 64-битную систему
вручную представляется затруднительным, особенно учитывая сложность математических
алгоритмов.

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


Программный интерфейс для работы с облаками точек и
триангулированными сетками
   •   Библиотека содержит процедуры импорта/экспорта облаков точек и триангулированных
       поверхностей (форматы ASCII, STL, PLY, OBJ, VRML и собственный формат Leios RVE).
   •   Сбор данных о сетки
   •   Элементарные операции редактирования сетки.
   •   Операции выбора облаков точек и триангулированных поверхностей.
   •   Фильтрация облаков точек, подавление шума, сглаживание, офсет.
•   Триангуляция облаков точек.
•   Восстановление триангулированной сетки, заполнение отверстий, сглаживание.




•   Прореживание и перестройка триангулированной сетки.
•   Построение сечений и разбиение триангулированной поверхности с использование
    плоскости.
•   Создание плоских, цилиндрических или сферических поверхностей из частей сетки.




•   Соединение нескольких облаков точек или триангулированных сеток в единый объект.
•   Визуализация облака точек и триангулированной поверхности с помощью библиотеки
    OpenGL.
•   Регистрация триангулированных поверхностей или облаков точек.




•   Процедуры псевдо трехмерной триангуляции (2.5D).
•   Триангуляция облаков точек внутри заданного внешнего контура.
•   Использование временных файлов для осуществления редактирования больших облаков
       точек в 32 битной среде.
   •   Триангуляция между двумя ломаными линиями.
   •   Процедура пластической деформации самопересечений сетки.
   •   Процедура пластической деформации пересечения ломаных линий двух сеток.
   •   Процедура сглаживания ломаных линий и уменьшения размера.
   •   Процедура пластической деформации поперечного сечения сетки через две точки на
       сетке.
   •   Процедуры импорта-экспорта с поддержкой координат центра масс с двойной точностью.
   •   Процедура автоматического объединения объектов.


Библиотека подгонки деталей
Это расширение библиотеки для управления необработанными NURBS поверхностями при
использовании подгонки.

   •   Спецификация четырехгранных конфигураций на триангулированной сетке.
   •   Автоматическая подгонка поверхностей с автоматической коррекцией NURBS кривыми.
Библиотека обработки граней и ребер
Эта библиотека расширения осуществляет:

   •   Автоматическое выделение линий скруглений (кривых граней, центральной кривой сетки,
       кривых ребер).
   •   Разбиение сетки на участки без участия скруглений, которые могут быть подогнаны к
       необработанным NURBS поверхностям.
Необходимость миграции библиотеки компонентов на 64-битную
платформу
Компания E.G.S. S.r.l. занимается разработкой своих решений с 2002 года, когда в Италии был
открыт ее офис. С самых ранних этапов разработки компании были ориентированы на
высокопроизводительные настольные системы.

Минимальный компьютер, на котором работает решение E.G.S. S.r.l. имеет следующую
конфигурацию (по данным на начало 2008 года):

   •   Процессор: Intel Core Duo T2300 or higher, AMD X2 3800+ or higher.
   •   Оперативная память: 2GB
   •   Графическая карта: Nvidia Quadro / 6x series or higher, ATI/AMD "x" series / FireGL or higher.
   •   Операционная система: Windows XP Professional SP2 or higher, Windows Vista

В связи с ростом обрабатываемых объемов данных, разумеется, ограничения на оперативную
память 32-битной версии (не более 3 гигабайт) оказались недостаточными для серьезных
проектов. Поэтому необходимость выпуска 64-битной версии не вызывала вопросов у
руководства E.G.S. S.r.l.. Однако под вопросом была возможность быстрого выпуска подобной
версии. Вручную просмотреть указанный объем кода практически невозможно.


Участие компании ООО "СиПроВер" в миграции библиотеки
компонентов
На помощь пришли специалисты компании ООО "СиПроВер", которые использовали для
миграции кода на 64-битную платформу анализатор кода Viva64.

Программный продукт Viva64 обеспечивает диагностику ошибок, специфичных для 64-битных
Windows-приложений. Viva64 представляет собой lint-подобный статический анализатор Си/Си++
кода. Области применения Viva64: проверка новых 64-битных программных решений, помощь в
переносе 32-битного программного кода на 64-битную систему, оптимизация кода с учетом
особенностей 64-битной архитектуры.

Используя Viva64 специалисты ООО "СиПроВер" обеспечили быструю миграцию библиотеки
компонентов, обнаружив и исправив проблемные места в исходном коде библиотеки. В
результате в процессе миграции такой большой и сложной библиотеки были задействованы всего
лишь несколько человек.

Миграция кода с использованием Viva64 позволила сэкономить много времени, которое бы
пришлось затратить на ручной просмотр кода. А главное не допустить новых программных
ошибок, которые возможны в процессе миграции на новую платформу.

Основные проблемные моменты, выявленные в процессе анализа кода:

   •   особенности вычислительных алгоритмов при обработке больших объемов данных;
   •   работа с файлами большого размера;
   •   обработка 3d-моделей, содержащих большое количество треугольников (чем больше
       треугольников, тем точнее модели);
   •   работа подсистемы лицензирования;

Все обнаруженные с помощью анализатора Viva64 проблемы были исправлены, в результате чего
64-битная версия Leios Studio была выпущена в срок с высоким качеством.

E.G.S. S.r.l. - частная компания, миссией которой является разработка программ и решений для
развитой обработки результатов 3D сканирования. Офисы компании были открыты в Италии и в
Москве в 2002 году. Сайт: http://www.egsolutions.com.
Ad

Recommended

якобовский - введение в параллельное программирование (3)
якобовский - введение в параллельное программирование (3)
Michael Karpov
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Tatyanazaxarova
Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...
Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...
Ilya Slobodin
CSoft Машиностроение Каталог 2012
CSoft Машиностроение Каталог 2012
Группа компаний CSoft
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движок
Roman_Lut
Open gl и direct3d
Open gl и direct3d
Олег Булков
Урок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окружения
Tatyanazaxarova
Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программ
Tatyanazaxarova
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Tatyanazaxarova
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибки
Tatyanazaxarova
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структур
Tatyanazaxarova
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данных
Tatyanazaxarova
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. Исключения
Tatyanazaxarova
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен данными
Tatyanazaxarova
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
Tatyanazaxarova
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединениях
Tatyanazaxarova
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателей
Tatyanazaxarova
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
Tatyanazaxarova
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвига
Tatyanazaxarova
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Tatyanazaxarova
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числа
Tatyanazaxarova
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибок
Tatyanazaxarova
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
Tatyanazaxarova
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном коде
Tatyanazaxarova
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложения
Tatyanazaxarova
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурации
Tatyanazaxarova
PVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложений
Tatyanazaxarova
Статический анализ Си++ кода
Статический анализ Си++ кода
Tatyanazaxarova

More Related Content

More from Tatyanazaxarova (20)

Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Tatyanazaxarova
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибки
Tatyanazaxarova
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структур
Tatyanazaxarova
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данных
Tatyanazaxarova
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. Исключения
Tatyanazaxarova
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен данными
Tatyanazaxarova
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
Tatyanazaxarova
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединениях
Tatyanazaxarova
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателей
Tatyanazaxarova
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
Tatyanazaxarova
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвига
Tatyanazaxarova
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Tatyanazaxarova
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числа
Tatyanazaxarova
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибок
Tatyanazaxarova
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
Tatyanazaxarova
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном коде
Tatyanazaxarova
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложения
Tatyanazaxarova
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурации
Tatyanazaxarova
PVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложений
Tatyanazaxarova
Статический анализ Си++ кода
Статический анализ Си++ кода
Tatyanazaxarova
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Tatyanazaxarova
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибки
Tatyanazaxarova
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структур
Tatyanazaxarova
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данных
Tatyanazaxarova
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. Исключения
Tatyanazaxarova
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен данными
Tatyanazaxarova
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
Tatyanazaxarova
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединениях
Tatyanazaxarova
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателей
Tatyanazaxarova
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
Tatyanazaxarova
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвига
Tatyanazaxarova
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Tatyanazaxarova
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числа
Tatyanazaxarova
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибок
Tatyanazaxarova
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
Tatyanazaxarova
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном коде
Tatyanazaxarova
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложения
Tatyanazaxarova
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурации
Tatyanazaxarova
PVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложений
Tatyanazaxarova
Статический анализ Си++ кода
Статический анализ Си++ кода
Tatyanazaxarova

Изучение проблемы: перенос Си++ библиотек для работы с облаками точек итриангулированными сетками на 64-битную платформу

  • 1. Изучение проблемы: перенос Си++ библиотек для работы с облаками точек итриангулированными сетками на 64-битную платформу Автор: Евгений Рыжков Дата: 15.01.2009 Аннотация Итальянская компания E.G.S. S.r.l. занимается разработкой решений в области моделирования трехмерных объектов на базе триангулированных сеток. Введение Итальянская компания E.G.S. S.r.l. занимается разработкой решений в области моделирования трехмерных объектов на базе триангулированных сеток. Для этой цели она использует собственную библиотеку компонентов Leios Components. Когда компании E.G.S. S.r.l. понадобилось выпустить 64-битную версию своих компонентов, она обратилась к ООО "СиПроВер" как к компании, специализирующейся на разработке анализаторов кода для 64-битных и параллельных приложений.
  • 2. Библиотека компонентов Leios Components Библиотека компонентов Leios Components представляет собой набор различных библиотек: 1. Программный интерфейс для работы с облаками точек и триангулированными сетками. 2. Библиотека подгонки поверхностей. 3. Библиотека для обработки граней и ребер. Общий объем исходного кода составляет 13 мегабайт (440 000 строк кода), решение состоит из нескольких десятков проектов. Очевидно, что перенос такого объема кода на 64-битную систему вручную представляется затруднительным, особенно учитывая сложность математических алгоритмов. Для того чтобы представить себе тип кода, который содержится в библиотеке, достаточно посмотреть основные возможности трех указанных компонентов. Программный интерфейс для работы с облаками точек и триангулированными сетками • Библиотека содержит процедуры импорта/экспорта облаков точек и триангулированных поверхностей (форматы ASCII, STL, PLY, OBJ, VRML и собственный формат Leios RVE). • Сбор данных о сетки • Элементарные операции редактирования сетки. • Операции выбора облаков точек и триангулированных поверхностей. • Фильтрация облаков точек, подавление шума, сглаживание, офсет.
  • 3. Триангуляция облаков точек. • Восстановление триангулированной сетки, заполнение отверстий, сглаживание. • Прореживание и перестройка триангулированной сетки.
  • 4. Построение сечений и разбиение триангулированной поверхности с использование плоскости. • Создание плоских, цилиндрических или сферических поверхностей из частей сетки. • Соединение нескольких облаков точек или триангулированных сеток в единый объект. • Визуализация облака точек и триангулированной поверхности с помощью библиотеки OpenGL. • Регистрация триангулированных поверхностей или облаков точек. • Процедуры псевдо трехмерной триангуляции (2.5D). • Триангуляция облаков точек внутри заданного внешнего контура.
  • 5. Использование временных файлов для осуществления редактирования больших облаков точек в 32 битной среде. • Триангуляция между двумя ломаными линиями. • Процедура пластической деформации самопересечений сетки. • Процедура пластической деформации пересечения ломаных линий двух сеток. • Процедура сглаживания ломаных линий и уменьшения размера. • Процедура пластической деформации поперечного сечения сетки через две точки на сетке. • Процедуры импорта-экспорта с поддержкой координат центра масс с двойной точностью. • Процедура автоматического объединения объектов. Библиотека подгонки деталей Это расширение библиотеки для управления необработанными NURBS поверхностями при использовании подгонки. • Спецификация четырехгранных конфигураций на триангулированной сетке. • Автоматическая подгонка поверхностей с автоматической коррекцией NURBS кривыми.
  • 6. Библиотека обработки граней и ребер Эта библиотека расширения осуществляет: • Автоматическое выделение линий скруглений (кривых граней, центральной кривой сетки, кривых ребер). • Разбиение сетки на участки без участия скруглений, которые могут быть подогнаны к необработанным NURBS поверхностям.
  • 7. Необходимость миграции библиотеки компонентов на 64-битную платформу Компания E.G.S. S.r.l. занимается разработкой своих решений с 2002 года, когда в Италии был открыт ее офис. С самых ранних этапов разработки компании были ориентированы на высокопроизводительные настольные системы. Минимальный компьютер, на котором работает решение E.G.S. S.r.l. имеет следующую конфигурацию (по данным на начало 2008 года): • Процессор: Intel Core Duo T2300 or higher, AMD X2 3800+ or higher. • Оперативная память: 2GB • Графическая карта: Nvidia Quadro / 6x series or higher, ATI/AMD "x" series / FireGL or higher. • Операционная система: Windows XP Professional SP2 or higher, Windows Vista В связи с ростом обрабатываемых объемов данных, разумеется, ограничения на оперативную память 32-битной версии (не более 3 гигабайт) оказались недостаточными для серьезных проектов. Поэтому необходимость выпуска 64-битной версии не вызывала вопросов у руководства E.G.S. S.r.l.. Однако под вопросом была возможность быстрого выпуска подобной версии. Вручную просмотреть указанный объем кода практически невозможно. Участие компании ООО "СиПроВер" в миграции библиотеки компонентов На помощь пришли специалисты компании ООО "СиПроВер", которые использовали для миграции кода на 64-битную платформу анализатор кода Viva64. Программный продукт Viva64 обеспечивает диагностику ошибок, специфичных для 64-битных Windows-приложений. Viva64 представляет собой lint-подобный статический анализатор Си/Си++ кода. Области применения Viva64: проверка новых 64-битных программных решений, помощь в
  • 8. переносе 32-битного программного кода на 64-битную систему, оптимизация кода с учетом особенностей 64-битной архитектуры. Используя Viva64 специалисты ООО "СиПроВер" обеспечили быструю миграцию библиотеки компонентов, обнаружив и исправив проблемные места в исходном коде библиотеки. В результате в процессе миграции такой большой и сложной библиотеки были задействованы всего лишь несколько человек. Миграция кода с использованием Viva64 позволила сэкономить много времени, которое бы пришлось затратить на ручной просмотр кода. А главное не допустить новых программных ошибок, которые возможны в процессе миграции на новую платформу. Основные проблемные моменты, выявленные в процессе анализа кода: • особенности вычислительных алгоритмов при обработке больших объемов данных; • работа с файлами большого размера; • обработка 3d-моделей, содержащих большое количество треугольников (чем больше треугольников, тем точнее модели); • работа подсистемы лицензирования; Все обнаруженные с помощью анализатора Viva64 проблемы были исправлены, в результате чего 64-битная версия Leios Studio была выпущена в срок с высоким качеством. E.G.S. S.r.l. - частная компания, миссией которой является разработка программ и решений для развитой обработки результатов 3D сканирования. Офисы компании были открыты в Италии и в Москве в 2002 году. Сайт: http://www.egsolutions.com.