Наше программное обеспечение создает множество данных, которые привязаны и регистрируются с течением времени. Мы рассматриваем способы улучшения визуализации и отображения (обработанных) данных в трехмерном представлении, учитывая, что он привязан к географической привязке, представляется хорошей идеей.
Я ищу рекомендации SO для того, какие 3D-библиотеки лучше всего использовать в качестве основы при создании такого вида визуализации в приложении Windows Delphi/С++ Builder. Я добавлю щедрость, когда смогу.
Данные
- Записывается с течением времени (от часов до нескольких дней) и GPS-тегируется. Таким образом, у нас много данных по пути со временем.
- Пространственно: он представляет собой реальные 3D-элементы земли, такие как земля или 3D-элементы объектов вокруг Земли.
- Высокий объем: у нас может быть облако точек, скажем, от сотен тысяч до миллионов точек. Обработанные данные могут отображаться как поверхности, созданные из этих точечных облаков.
Из этого вы можете видеть, что интерактивная пространственная 3D-визуализация кажется хорошим подходом. Я предполагаю, что вы можете легко и быстро перемещаться по космосу, и данные будут загружаться или генерироваться "на лету" в зависимости от того, на что вы смотрите. Я бы предпочел, чтобы мы не пытались писать свою собственную 3D-библиотеку с нуля - для чего-то вроде этого должны быть хорошие существующие библиотеки, из которых мы можем работать.
Итак, я надеюсь на библиотеку, которая поддерживает:
- хорошая навигация (например, есть библиотека, основанная только на поворотах Эйлера? Можете ли вы "выбрать" объекты для вращения или перемещения с легкостью?);
- современные графические процессоры (только для шейдерного рендеринга, возможность подключиться к конвейеру для записи шейдеров, которые отображают значения в цвета и динамически изменяются, - думаю, данные, заданные цветом, через таблица цветного поиска);
- динамические данные/объекты (данные могут быть добавлены по мере их записи, а если объем данных слишком высок, мы должны иметь возможность размещать страницы и создавать или воссоздавать их и показывать только разумным подмножеством, так что независимо от того, что смотрит пользовательский видовой экран, есть на экране, но другие данные могут быть загружены/регенерированы, предпочтительно асинхронно или, по крайней мере, быстро по мере того, как пользователь осуществляет навигацию. Очевидно, что создание данных зависит от нас, но библиотека с крючками для этого было бы здорово.)
- и технологически работает с Delphi/С++ Builder и VCL.
Библиотеки
Есть две основные библиотеки, которые я рассмотрел до сих пор: я ищу знающие мнения об этих или других библиотеках, которые я не рассматривал.
1. FireMonkey
Это новая библиотека пользовательского интерфейса Embarcadero, доступная только в XE2 и выше. Наше приложение основано на VCL, и мы хотим разместить его в окне VCL; который, как представляется, официально не поддерживается, но неофициально работает нормально или доступен через сторонние.
Смешение структуры пользовательского интерфейса и трехмерной рамки с шейдерами и т.д. звучит великолепно. Но я не знаю, насколько сложна библиотека, какая поддержка у нее для данных, а не простой объект, такой как куб или сфера, и насколько хорошо разработаны это. Эта последняя ссылка имеет серьезную критику в отношении 3D-стороны библиотеки - достаточно серьезная, я не уверен, что она стоит в текущем состоянии на момент написания для нетривиального 3D-приложения.
Стоит ли пытаться написать новое окно визуализации в нашем приложении VCL с помощью FireMonkey?
2. GLScene
GLScene - это хорошо известная трехмерная платформа OpenGL для Delphi. Я никогда не использовал его сам, поэтому не имел опыта в том, как он работает или разработан. Тем не менее, я считаю, что он хорошо интегрируется в VCL-окна и поддерживает шейдеры и современные графические процессоры. Я не знаю, как его график сцены или навигационная работа или насколько хорошо могут быть реализованы динамические данные.
В своем списке функций конкретно упоминаются некоторые вещи, которые меня интересуют, такие как простое вращение/перемещение, процедурные объекты (подразумевающие динамические данные легко реализовать) и вспомогательные функции для выбора. Кажется, шейдеры - это только Cg (не GLSL или другой язык, не относящийся к конкретному вендору). Он также поддерживает "поддержку полиморфного изображения для текстурирования (позволяет многие форматы, а также процедурные текстуры), легко расширяемый" - это может означать только много форматов изображений, или он может указывать на то, где текстура может быть динамически изменена, например, для динамического сопоставления цветов.
Куда отсюда?
Это единственные две основные 3D-библиотеки, которые я знаю для Delphi или С++ Builder. Я что-то пропустил? Есть ли доводы "за" и "против", о которых я не знаю? У вас есть какой-либо опыт использования любого из них для такого рода целей, и с какими препятствиями мы должны быть осторожны или должны знать, о чем мы знаем и используем?
В настоящее время мы используем Embarcadero RAD Studio 2010, и большая часть нашего программного обеспечения написана на С++. У нас небольшое количество Delphi, и мы можем рассмотреть возможность обновления IDE, но мы, скорее всего, подождем, пока не будет выпущен 64-разрядный компилятор С++. По этой причине библиотека, которая работает в RS2010, может быть лучше.
Спасибо за ваш вклад:) Я получаю качественные ответы, поэтому я добавлю щедрость, когда смогу!