Этот простенький визуализатор был первоначально написан на C и был оптимизирован для работы на PC AT286 платформы под DOS. Для получения перерисовки в реальном времени приходилось использовать вычисления в целых числах и другие ухищрения.
Мощность современных персональных компьютеров такова, что можно не заморачиваться оптимизацией и целочисленными вычислениями. Особенно в случаях, когда многогранные поверхности содержат достаточно мало треугольников.
Переписал этот пакет удаления невидимых поверхностей на Flex4. В нем в полном объеме используются вычисления с плавающей арифметикой. Никакой оптимизации не проводил, замеров на производительность тоже. Основная задача была научиться выводить на экран невыпуклые многогранники во Flex4.
Вся реализация с отладкой в вводом данных заняла день (Алгоритм, действительно простенький). Не перестаю удивляться каждый раз, когда заглядываю в свои старые тексты. Неужели так можно было писать? Интересно, что скажу через пару месяцев об этих текстах.
Ниже приведены две простенькие модели демонстрирующие возможности 3d-визуализатора многогранников. При помощи мыши можно вращать модели. Для этого нужно нажать левую кнопку мыши на изображении и перемещать указатель. Для просмотра необходимо установить десятую версию flash-плеера.
Стелла Кеплера:
Этот пример демонстрирует, кроме удаления невидимых поверхностей возможность этого алгоритма по обработке пересекающихся треугольников. Можно не заботиться о пересекающихся гранях. Алгоритм должен их правильно отрабатывать. В этом примере одноцветные грани октаэдра лежащие в одной плоскости заданы одним треугольником. Можно рассматривать эту звездчатую форму октаэдра как объединение двух тетраэдров. Грани полупрозрачные, можно разглядеть внутренность тела.
Модель легкового автомобиля.
Этот многогранник не замкнутый. У автомобиля "открыты" окна и "выбиты" фары. Модель была создана вручную в далеких восьмидесятых без каких-либо визуальных редакторов тупым выписыванием координат. Даже не помню сколько времени потратил на это! Всего в модельке машинки 22 вершины и 38 треугольников.