3D библиотека рекомендации для интерактивной визуализации пространственных данных? - PullRequest
20 голосов
/ 05 марта 2012

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

Я ищу рекомендации SO относительно 3D-библиотек.Лучше всего использовать в качестве основы при построении таких визуализаций в Windows-приложении на основе Delphi- / C ++ Builder.Я добавлю вознаграждение, когда смогу.

Данные

  • Записываются с течением времени (от часов до дней) и помечаются GPS.Итак, у нас есть много данных, следующих по пути во времени.
  • Пространственно: оно представляет реальные трехмерные элементы земли, такие как земля, или трехмерные элементы объектов вокруг Земли.
  • Большой объем: у нас может быть облако точек, скажем, от сотен тысяч до миллионов точек.Обработанные данные могут отображаться в виде поверхностей, созданных из этих облаков точек.

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

Итак, я надеюсь на библиотеку, котораяподдерживает:

  • хорошая навигация (библиотека, например, основана только на вращениях Эйлера? Вы можете «выбирать» объекты, чтобы вращаться вокруг или легко перемещаться?);
  • современные графические процессоры (рендеринг только с шейдерами в порядке; возможность подключиться к конвейеру для написания шейдеров, которые отображают значения в цвета и динамически изменяются, было бы здорово - представьте, что значения данных задаются цветом черезтаблица соответствия цветов);
  • динамические данные / объекты (данные могут быть добавлены по мере их записи; а если объем данных слишком велик, мы должны иметь возможность осуществлять входные и исходные операции иливоссоздайте их и покажите только разумное подмножество так, чтобы все, что смотрит пользовательский вид, было на экране, но другие данные могли быть загружены / восстановлены, предпочтительно асинхронно, или по крайней мере qпросто как пользователь перемещается.Очевидно, что создание данных зависит от нас, но библиотека, которая имеет хуки для такого рода вещей, была бы хороша.)
  • и технологически работает с Delphi / C ++ Builder и VCL .

Библиотеки

Есть две основные библиотеки, которые я рассмотрел до сих пор - я ищу осведомленные мнения об этих или других библиотеках, которые я не рассматривал.

1. FireMonkey

Это новая библиотека пользовательского интерфейса Embarcadero, которая доступна только в XE2 и выше.Наше приложение основано на VCL, и мы хотим разместить его в окне VCL;это официально не поддерживается, но неофициально работает нормально или доступно через сторонних производителей .

Сочетание UI Framework и 3D Framework с шейдерами и т. д. звучит великолепно,Но я не знаю, насколько сложна библиотека, как она поддерживает данные, которые не являются простым объектом, таким как куб или сфера, и , насколько хорошо он спроектирован .Эта последняя ссылка подвергает серьезной критике трехмерную сторону библиотеки - достаточно серьезную, я не уверен, что она стоит в ее текущем состоянии на момент написания для нетривиального трехмерного приложения.

Стоит ли пытаться написать новое окно визуализации в нашем приложении VCL, используя FireMonkey?

2. GLScene

GLScene - это хорошо известная 3D-среда OpenGL для Delphi.Я никогда не использовал его сам, поэтому не имею никакого опыта о том, как он работает или разработан.Тем не менее, я считаю, что он хорошо интегрируется в окна VCL и поддерживает шейдеры и современные графические процессоры.Я не знаю, как работает его граф сцены или навигация или насколько хорошо могут быть реализованы динамические данные.

В его списке функций конкретно упоминаются некоторые вещи, которые меня интересуют , такие как простое вращение / перемещение, процедурные объекты (подразумевается, что динамические данные легко реализовать) и вспомогательные функции для выбора. Кажется, шейдеры - это только Cg (не GLSL или другой язык, не связанный с вендором). Он также поддерживает «полиморфную поддержку изображений для текстурирования (допускает много форматов, а также процедурные текстуры), легко расширяемая» - это может означать только много форматов изображений или это может указывать на то, где текстура может быть динамически изменена, например, для динамического цветового отображения.

Куда отсюда?

Это единственные две основные 3D-библиотеки, которые я знаю для Delphi или C ++ Builder. Я что-нибудь пропустил? Есть ли плюсы и минусы, о которых я не знаю? Есть ли у вас какой-либо опыт использования любого из них для такого рода целей, и какие подводные камни нам следует остерегаться или какие функции мы должны знать и использовать?

В настоящее время мы используем Embarcadero RAD Studio 2010 , и большая часть нашего программного обеспечения написана на C ++. У нас есть небольшое количество Delphi, и мы можем рассмотреть вопрос об обновлении IDE, но мы, скорее всего, дождемся выпуска 64-битного компилятора C ++. По этой причине лучше всего подойдет библиотека, которая работает в RS2010.

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

Ответы [ 4 ]

8 голосов
/ 08 марта 2012

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

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

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

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

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

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

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

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

5 голосов
/ 08 марта 2012

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

1 голос
/ 27 апреля 2012

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

1 голос
/ 08 марта 2012

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

...