Подтвердить что ты не робот

Рекомендации по 3D-библиотеке для интерактивной визуализации пространственных данных?

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

Я ищу рекомендации 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, может быть лучше.

Спасибо за ваш вклад:) Я получаю качественные ответы, поэтому я добавлю щедрость, когда смогу!

4b9b3361

Ответ 1

Я использовал GLScene в своем 3D-программном обеспечении геомашинки и, хотя он не использовался до такой степени, что вы ищете, я могу поручиться, что он кажется наиболее подходящим для того, что вы пытаетесь сделать.

GLScene поддерживает рендеринг ландшафта и добавление настраиваемых объектов в сцену. С объектами можно взаимодействовать, и вы можете создавать сложные 3D-модели объектов, используя различные строительные блоки GLScene. К сожалению, я не могу описать, как он будет работать с миллионами точек, но я знаю, что он довольно оптимизирован и отлично работает на минимальном аппаратном обеспечении, - что, как говорится, целевому ПК, на который я нашел, требуется специальная графическая карта, способная использовать расширения OpenGL 2.1 или выше (я обнаружил небольшие проблемы со встроенными видеокартами).

В другой библиотеке, на которую я смотрел, была DXscene, которая кажется очень похожей на GLScene, хотя и использует DirectX вместо OpenGL. Из памяти это был коммерческий продукт, в котором GLScene был лицензирован под GPL. (РЕДАКТИРОВАТЬ - на данный момент, похоже, не работает страница: http://www.ksdev.com/index.html)

GLScene все еще находится в активной разработке и предоставляет довольно обширную библиотеку функций, базовых объектов и текстурирования и т.д. Для вас предусмотрены такие функции, как ротация, перевод, подача, ролл, поворот, лучевое кастинг - чтобы назвать несколько. Для каждого базового объекта предусмотрена съемка видимости, а также просмотр камер, освещение и сетки. Базовые объекты включают кубы, сферы, трубы, тетраэдры, конусы, рельеф, сетки, 3D-текст, стрелки, чтобы назвать несколько. Объекты могут быть выбраны с помощью мыши и перемещены по 1,2 или 3 осям. Вспомогательные функции включены для автоматического вычисления самого верхнего объекта, над которым находится мышь. Сложные трехмерные фигуры могут быть построены путем присоединения базовых объектов к другим базовым объектам иерархически. Так, например, автомобиль может быть построен с использованием прямоугольника в качестве базового объекта и прикрепления к нему четырех цилиндров для колес - тогда вы можете манипулировать "автомобилем" в целом - так как четыре цилиндра прикреплены к базовому прямоугольнику.

Единственный недостаток, который я мог бы привлечь к вашему вниманию, - это иногда ограниченная помощь/поддержка, доступная вам. Да, есть справочное руководство и несколько демонстрационных приложений, чтобы показать вам, как делать такие вещи, как выбирать объекты и перемещать их, однако справочное руководство не является полным, и есть вероятность, что вы "застряли" на том, как выполнить определенная задача. Поддержка форума несколько ограничена/разрежена. Если у вас есть хорошее знание основ и концепций 3D, я уверен, что вы можете это исправить.

Что касается Firemonkey - у меня не было опыта с этим, поэтому я не могу комментировать. Я считаю, что это больше ориентировано на мобильные приложения с более низкими требованиями к оборудованию, поэтому у вас могут быть проблемы с большими наборами данных.

Вот некоторые другие ссылки, которые вы можете рассмотреть - у меня нет опыта с ними:

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

Ответ 2

Вы пробовали glData? http://gldata.sourceforge.net/ Он старый (~ 2004, Delphi 7), и я лично не использовал библиотеку, но некоторые из них потрясающие.

Ответ 3

вы можете использовать GLScene или OpenGL они хорошие 3D-рендеринг и очень просты в использовании.

Ответ 4

Поскольку вы уже используете данные с привязкой, возможно, вам стоит подумать о включении GoogleEarth в ваше приложение Delphi, например this? Затем вы можете добавить к нему данные как точки, пути или объекты.