Raport Temat: Stworzenie unikatowego warsztatu naukowego z zakresu pozyskania i przetwarzania danych geoprzestrzennych stosowanych w modelowaniu hydrodynamicznym przepływów powodziowych Kierownik: dr inż. Przemysław Tymków Numer: UMO-2011/01/D/ST10/07671 Michał Andruszko
1.Specyfikacja założeń dotycząca struktur danych 1. Wszystkie klasy i rozszerzenia aplikacji mają strukturę obiektową aby w każdej chwili można było sprawnie wprowadzać nowe i zmieniać istniejące już funkcjonalności. 2. Aplikacja komunikuje się poprzez adapter z bazą danych która przechowuje i udostępnia informacje. 3. Wszystkie obliczenia które mocno obciążają maszynę zostają przekazane do rdzeni CUDA aby zostać tam przeliczone nie zaprzęgając do tego procesora. 4. Można dodawać nowe skaningi lecz do każdego skaningu należy tworzyć nową bazę danych. 5. Import do bazy danych odbywa się poprzez aplikację, ponieważ w trakcie importu dane są interpretowane i rozdzielane na różne warstwy uwarunkowane typem obiektu. (budynek, drzewo) 6. Aplikacja musi mieć możliwość zmiany danych dostępowych do bazy danych a także łączenie się ze zdalną bazą danych 7. Aplikacja potrafi wczytać podstawowe modele przestrzenne wraz z teksturami 8. Obiekty w oknie Renderingu 3d możemy obracać, przesuwać i zaznaczać 9. Każdy obiekt z bazy ma swoją nazwę i właściwości do których możemy mieć dostęp po wybraniu konkretnego elementu 10. Poszczególne warstwy możemy wyłączać z widoku jak i pojedyncze elementy. 11. Aplikacja posiada moduł symulacji przepływu wody. Można ustawić dowolnie źródło wody, sparametryzować je i dokonać symulacji. 12. Wyniki z okna Renderingu 3d możemy zapisać jako JPG lub w postaci filmu.
2.Diagram klas WaterFlow + setwaterpoint() + setwaterammount() + startwaterflow() + stopwaterflow() + deletewater() + insertwater() + hidewater() + showwater() + Compute() + getgravity() CLOO - connection - host - username - password - databasename # Initialize() # OpenConnection() # CloseConnection() # Delete() # SelectToList() # Select() # Test() DataParser + Initalize() +getinstance() +ParseData() +getdata() +savedata() CudaMultiTasker +initcuda() +testcuda() +initkernel() +runkernel() +getkernel() +addtask() +gettask() +compute() +clearbuffers() +setbuffers() SharedContext Program Main Main() +loadscene() +getcontext() + openclcomputescene() +ComputeCommandQueue() +finishcompute() CLOO Exporter Renderer resources # SaveAsImage() # SaveAsAvi() # ExportScene() - databuffer - indexbuffer - viewdist - mousedelta - mousetmp - lookatpoint - location - mousespeed - pitch - facing + OnLoad() +LoadObj() +LoadTexture() +Draw() +OnUpdateFrame() +OnRenderFrame() +KeyDown() +MouseWhell() +MouseMove() +LoadTex() +CompileShaders() OpenTK OpenTK.GlControl Meshomatic Cloo FilesParser + ParseFile() + open3dformat() pliki CUDA Main klasa tworząca główną instancję programu, łączy w spójną całość wszystkie klasy programu. OpenTK Jest to binding OpenGL, OpenAL i OpenCL pod.net. Do tego posiada dość rozbudowaną bibliotekę matematyczną obsługującą wektory, macierze, kwaterniony i struktury opisujące krzywe Béziera. Posiada kilka klas-kontrolek, które ułatwiają integracje z już istniejącymi programami, np. GLControl dla Windows Forms
Cloo klasa umożliwiająca współdzielenie obiektów 3d miedzi środowiskiem graficznym a rdzeniami CUDA. Meshomatic klasa potrafiąca zaczytać obiekty 3d w popularnych formatach danych. klasa pozwalająca łączyć się z bazami danych lokalnymi jak i zdalnymi co zwiększa uniwersalność aplikacji, co w przyszłości daje potencjalną możliwość operacji na tych samych danych źródłowych ale z różnymi parametrami różne scenariusze zdarzeń. Exporter klasa dająca możliwość zapisywania renderingu jako obrazów lub sekwencji filmowych. FileParser klasa zarządzająca zaczytywaniem plików oraz pilnująca spójności danych podczas przetwarzania danych wejściowych. DataParser klasa przygotowująca zaczytane dane do obliczeń oraz nadzorująca poprawność, spójność oraz transfer danych. Renderer jedna z kluczowych klas odpowiadająca za renderowanie gotowych i przeliczonych obiektów, w klasie tej zaimplementowane są wszystkie transformacje sceny, ruchy kamerą oraz wszystkie pozostałe funkcje dotyczące okna renderującego. SharedContext klasa pośrednicząca między obliczeniami na rdzeniach CUDA a wyświetlaniem przeliczonych danych na ekranie. CudaMultiTasker klasa odpowiedzialna za przygotowanie obliczeń wielowątkowych dla rdzeni CUDA oraz odbiór przeliczonych danych. WaterFlow klasa pozwalająca generować symulację wody, implementuje podstawowe prawa fizyczne wymagane do generowania przepływów.
2.Struktura programu zapisz i odczyt z bazy Zasilanie danymi Program pliki Moduł przeliczający Dane Procesorami GPU Moduł CUDA Moduł renderujący Zapis jako obrazy i filmy Moduł eksportu Przetwarzanie danych z bazy i plików Moduł parsujący surowe dane Generowanie przepływu Pliki moduł specjalizujący się w zaczytywaniu plików oraz przygotowywaniu danych do obliczeń i wyświetlania Moduł eksportu zadaniem tego modułu jest zapis wyrenderowanej sceny jako obrazów lub filmów. Moduł renderujący moduł aplikacji wyświetlający przeliczone dane w postaci graficznej, łączy symulacje i obliczenia w jedną całość. moduł łączący się z bazami danych pośredniczący w odczycie i zapisie danych. Moduł CUDA moduł przetwarzający i przeliczający dane procesorami GPU. Moduł parsujący dane przygotowuje i grupuje dane które zostaną wysłane do przeliczeń na rdzenie CUDA. Moduł generowania przepływu moduł pozwalający symulować napływ wody oraz wpływ zalania na otoczenie
3. Struktura bazy danych Terrain, Shrubs, Trees, Buildings tabele w bazie danych przechowujące konkretne typu obiektów Terrain tereny Shrubs - krzewy Trees drzewa, Buildings - budynki Terrain Shrabs Trees Buildings Id unikalny identyfikator każdego obiektu Name nazwa obiektu IsVisible flaga mówiąca o tym czy obiekt ma być ukryty czy widoczny Color kolor obiektu X, Y, Z współrzędne każdego obiektu Rotation obrót obiektu Scale skala, zmienna typu float wyrażana w procentach np. 1 100% 0.6 60% Size rozmiar obiektu Data obiekt w bazie danych w postaci binarnej
4. Aplikacja Widok głównego okna Widok okna głównego wraz z pokazanymi właściwościami konkretnego elementu.