Rekomendacje biblioteki 3D do interaktywnej wizualizacji danych przestrzennych?

Nasze oprogramowanie wytwarza wiele danych, które są georeferencjonowane i rejestrowane w czasie. Rozważamy sposoby ulepszenia wizualizacji, a wyświetlanie (przetworzonych) danych w widoku 3D, biorąc pod uwagę ich georeferencję, wydaje się dobrym pomysłem.

Szukam rekomendacji SO, które biblioteki 3D najlepiej wykorzystać jako bazę przy budowaniu tego typu wizualizacji w aplikacji Windows opartej na Delphi - / C++Builderze. Dodam bounty kiedy może.

DANE

  • jest rejestrowany w czasie (od godzin do dni) i jest oznaczany GPS. Mamy więc wiele danych podążających ścieżką w czasie.
  • jest przestrzenna: reprezentuje rzeczywiste elementy 3D ziemi, takie jak ląd, lub elementy 3D obiektów wokół Ziemi.
  • jest duża objętość: możemy mieć chmurę punktów, powiedzmy, od setek tysięcy do milionów punktów. Przetworzone dane mogą być wyświetlane jako powierzchnie utworzone z tych chmur punktów.

Od tego, ty widać, że interaktywna, przestrzenna wizualizacja 3D wydaje się dobrym podejściem. Wyobrażam sobie coś, w czym można łatwo i szybko poruszać się w przestrzeni kosmicznej, a dane będą ładowane lub generowane w locie w zależności od tego, na co patrzysz. Wolałbym, żebyśmy nie próbowali pisać własnej biblioteki 3D od zera - do czegoś takiego muszą być dobre istniejące biblioteki, z których możemy pracować.

Więc liczę na bibliotekę, która wspiera:

  • dobrze nawigacja (czy biblioteka bazuje tylko na rotacjach Eulera? Czy możesz łatwo "wybierać" obiekty do obracania lub poruszania się?);
  • (Renderowanie tylko shaderów jest w porządku; możliwość podłączenia się do potoku, aby pisać shadery, które mapują wartości na kolory i zmieniają się dynamicznie, byłaby świetna-pomyśl o wartościach danych podanych w Kolorze za pomocą tabeli wyszukiwania kolorów);
  • dynamiczne dane / obiekty (Dane mogą być dodawane tak jak są rejestrowane; a jeśli wolumen danych jest zbyt wysoko, powinniśmy być w stanie strona rzeczy w i z lub odtworzyć je, i tylko pokazać sensowny podzbiór tak, że cokolwiek użytkownik viewport patrzy jest tam na ekranie, ale inne dane mogą być ładowane/regenerowane, najlepiej asynchronicznie, lub przynajmniej szybko, jak użytkownik porusza się. Oczywiście tworzenie danych zależy od nas, ale biblioteka, która ma Hooki do tego typu rzeczy, byłaby świetna.)
  • i technologicznie, współpracuje z Delphi / C++Builder i VCL .

Biblioteki

Są dwie główne biblioteki, które do tej pory rozważałem - Szukam kompetentnych opinii na ich temat lub innych bibliotek, których nie rozważałem.

1. FireMonkey

Jest to nowa biblioteka interfejsu Embarcadero, która jest dostępna tylko w XE2 i nowszych wersjach. Nasza aplikacja jest oparta na VCL i chcielibyśmy go hostować w oknie VCL; wydaje się to być oficjalnie nieobsługiwane, ale nieoficjalnie działa dobrze, lub jest dostępne za pośrednictwem stron trzecich .

Połączenie UI framework i 3D framework z shaderami itp brzmi świetnie. Ale nie wiem, jak skomplikowana jest biblioteka, jakie ma wsparcie dla danych, które nie są prostym obiektem jak sześcian czy Kula, i jak dobrze zaprojektowana jest. Ten ostatni link ma poważną krytykę strony 3D biblioteki - na tyle poważne, że nie jestem pewien, czy warto w obecnym stanie w momencie pisania dla nietrywialnego 3D app.

Czy warto spróbować napisać nowe okno wizualizacji w naszej aplikacji VCL za pomocą FireMonkey?

2. GLScene

GLScene jest dobrze znanym frameworkiem 3D OpenGL dla Delphi. Sam nigdy go nie używałem, więc nie mam doświadczenia w tym, jak działa lub jest zaprojektowany. Uważam jednak, że dobrze integruje się z oknami VCL i obsługuje shadery i nowoczesne GPU. Nie wiem, jak działa jego Wykres sceny lub nawigacja, ani jak dobrze mogą być dane dynamiczne wdrożone.

Jego lista funkcji wyraźnie wymienia pewne rzeczy, które mnie interesują, takie jak łatwe obracanie/poruszanie się, obiekty proceduralne (sugerujące, że dynamiczne dane są łatwe do zaimplementowania) i funkcje pomocnicze do wybierania. Wydaje się, że shadery są tylko Cg (nie GLSL lub innym językiem niestandardowym.) Obsługuje również "polimorficzną obsługę obrazu do teksturowania (pozwala na wiele formatów, a także tekstur proceduralnych), łatwą rozbudowę" - co może oznaczać po prostu wiele formatów obrazu, lub może wskazywać miejsce, w którym tekstura może być dynamicznie zmieniana, na przykład w przypadku dynamicznego mapowania kolorów.

Dokąd stąd?

Są to jedyne dwie główne biblioteki 3D jakie znam dla Delphi lub C++Builder. Przegapiłem jakieś? Czy są jakieś plusy i minusy, których nie jestem świadoma? Czy masz jakieś doświadczenie w używaniu którejkolwiek z nich do tego rodzaju celów, i jakie pułapki powinniśmy być ostrożni lub funkcje powinniśmy wiedzieć i używać?

Obecnie używamy Embarcadero RAD Studio 2010 i większość naszego oprogramowania jest napisana w C++. Mamy niewielkie ilości Delphi i możemy rozważyć aktualizację IDE, ale najprawdopodobniej poczekamy aż 64-bitowy kompilator C++ zostanie wydany. Z tego powodu najlepsza może być Biblioteka działająca w RS2010.

Dzięki za wkład:) jestem po wysokiej jakości odpowiedzi, więc dodam bounty, kiedy będę mógł!

Author: Community, 2012-03-05

4 answers

Użyłem GLScene w moim oprogramowaniu do mapowania 3D i chociaż nie jest on używany w takim stopniu, w jakim szukasz, mogę ręczyć, że wydaje się najbardziej odpowiedni do tego, co próbujesz zrobić.

GLScene obsługuje renderowanie terenu i dodawanie konfigurowalnych obiektów do sceny. Obiekty mogą być interakcyjne i można tworzyć złożone modele 3D obiektów za pomocą różnych bloków konstrukcyjnych GLScene. Niestety nie mogę powiedzieć, jak to będzie działać z milionami punktów, ale wiem, że jest to dość zoptymalizowane i działa świetnie na minimalnym sprzęcie - mówiąc to - komputer docelowy znalazłem wymaganą dedykowaną kartę graficzną zdolną do korzystania z rozszerzeń OpenGL 2.1 lub wyższych (znalazłem małe problemy ze zintegrowanymi kartami graficznymi).

Inną biblioteką, na którą patrzyłem, była DXscene-która wydaje się dość podobna do GLScene, choć używa DirectX zamiast OpenGL. Z pamięci był to produkt komercyjny, na którym GLScene było licencjonowane na licencji GPL. (Edytuj-strona wydaje się być na dole w moment: http://www.ksdev.com/index.html )

GLScene jest nadal w aktywnym rozwoju i zapewnia dość obszerną bibliotekę funkcji, obiektów bazowych i teksturowania itp. Takie rzeczy jak obrót, tłumaczenie, pitch, roll, turn, ray casting-by wymienić tylko kilka - są dostępne dla Ciebie. Widoczność jest zapewniona dla każdego obiektu podstawowego, a także dla kamer, oświetlenia i siatek. Obiekty bazowe obejmują kostki, kule, rury, czworościany, stożki, teren, siatki, tekst 3d, strzałki, aby wymienić tylko kilka. Obiekty można wybierać za pomocą myszy i przesuwać wzdłuż 1,2 lub 3 osi. Funkcje pomocnicze są dołączone do automatycznego obliczania najwyżej położonego obiektu, pod którym znajduje się mysz. Złożone kształty 3D można budować poprzez dołączanie obiektów bazowych do innych obiektów bazowych w sposób hierarchiczny. Tak więc, na przykład, samochód może być zbudowany przy użyciu prostokąta jako obiektu bazowego i przymocowania do niego czterech cylindrów do kół - wtedy można manipulować "samochodem" jako całością-ponieważ cztery cylindry są przymocowany do prostokąt podstawy.

Jedynym minusem, który mogłem zwrócić na ciebie uwagę, jest czasami ograniczona pomoc / wsparcie dostępne dla Ciebie. Tak, istnieje podręcznik referencyjny i wiele aplikacji demonstracyjnych, które pokazują, jak robić rzeczy, takie jak zaznaczanie obiektów i przesuwanie ich, jednak podręcznik referencyjny nie jest kompletny i istnieje potencjał, aby "utknąć", jak wykonać określone zadanie. Obsługa Forum jest nieco ograniczona/ograniczona. Jeśli posiadasz solidną wiedzę na temat podstaw 3D i koncepcje jestem pewien, że możesz to nakręcać.

Co do Firemonkey - nie miałem z tym doświadczenia więc nie mogę komentować. Uważam, że jest to bardziej ukierunkowane na aplikacje mobilne o niższych wymaganiach sprzętowych, więc możesz mieć problemy z większymi zestawami danych.

Oto kilka innych linków, które możesz wziąć pod uwagę - nie mam z nimi doświadczenia:

Ostatni z nich jest skierowany do tworzenia gier - ale może dostarczyć przydatnych informacji.

 8
Author: Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:20

Próbowałeś glData? http://gldata.sourceforge.net/ Jest stary (~2004, Delphi 7), i osobiście nie korzystałem z biblioteki, ale niektóre wyjście jest niesamowite.

 5
Author: David A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 00:14:11

Możesz użyć GLScene lub OpenGL są dobre renderowanie 3D i jest bardzo łatwy w użyciu.

 1
Author: XBasic3000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 08:53:13

Skoro już używasz danych georeferencyjnych, może powinieneś rozważyć osadzenie GoogleEarth w swojej aplikacji Delphi, jak to? Następnie można dodawać do niego dane jako punkty, ścieżki lub obiekty.

 1
Author: avra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-27 10:30:05