Wizualizacja płomienia - Politechnika Wrocławska

Transkrypt

Wizualizacja płomienia - Politechnika Wrocławska
Politechnika Wrocławska
Instytut Informatyki Automatyki i Robotyki
Wizualizacja danych sensorycznych
Wizualizacja płomienia
Autor:
Weronika Matlakiewicz
Opiekun projektu:
dr inż. Bogdan Kreczmer
4 czerwca 2010
SPIS TREŚCI
SPIS TREŚCI
Spis treści
1 Charakterystyka tematu projektu
2
2 Opis problemu
2
3 Funkcjonalność aplikacji
3.1 Tworzenie płomienia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Proces inicjacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Proces animacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
2
3
4 Interfejs graficzny
3
5 Diagram klas
4
6 Diagram przepływu sterowania
4
7 Efekty pracy
7.1 Suwak . . . . . . . .
7.2 Przycisk ’Dmuchnij’
7.3 Przycisk ’Rozprosz’ .
7.4 Pola wyboru . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8 Wnioski i podsumowanie
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
4
5
5
5
1
3
1
FUNKCJONALNOŚĆ APLIKACJI
Charakterystyka tematu projektu
Celem projektu było stworzenie aplikacji przedstawiającej wizualizację płomienia, posiadającej graficzny interfejs
użytkownika, który pozwala wpływać na zachowanie aplikacji.
2
Opis problemu
Pierwszym istotnym elementem projektu był wybór programu wspomagającego tworzenie takich aplikacji. Po
zapoznaniu się z różnymi programami i bibliotekami umożliwiającymi tworzenie animacji i wizualizacji, do
realizacji projektu wybrano program QT4 wraz z biblioteką QGLViewer. Następnie należało opracować sposób
realizacji płomienia.
3
Funkcjonalność aplikacji
Aplikacja pozwala na oglądanie symulacji ognia. Panel administracyjny graficznego interfejsu użytkownika
umożliwia zmianę wysokości płomienia, symulację działania podmuchu oraz rozproszenie ognia. Ponadto pozwala
również wyświetlać dodatki do widoku w postaci siatki, osi X, Y, Z, oraz wskazania częstotliwości. Wszystkie
te funkcje zostały opisane w rozdziale 7.
3.1
Tworzenie płomienia
W projekcie przyjęto koncepcję płomienia złożonego z pojedynczych cząsteczek. Każda cząsteczka rodzi się
w źródle ogniska, a następnie, aż do osiągnięcia wieku maksymalnego, jest animowana. Po śmierci cząsteczki
jej miejsce zastepuje nowa, rodząca się w źródle. Aby jak najdokładniej odwzorować wygląd ognia założono, że
będzie się on składał z głównego płomienia (składającego się z 3/4 wszystkich cząstecezek)o stałym położeniu
źródła oraz z ognika, którego źródło jest mniejsze i porusza się wewnątrz głównego źródła. Współrzędne obydwu
źródeł opisane są wzorami:
• x = norm · cos(angle),
• y = norm · sin(angle),
• z = param · norm2 ,
gdzie paramater norm jest losowany z zakresów < 0; 0.1 > dla głównego ognia i < 0; 0.05 > dla ognika, natomiast
parametr angle, dla obydwu źródeł, jest losowym kątem z zakresu < 0; 2π >. Parametr param dla głównego
źródła wynosi 6.0, a dla ognika 3.0.
3.2
Proces inicjacji
Podczas tworzenia cząsteczki następuje przypisanie jej wartości zmiennej wewn, od której zależy, czy będzie
ona należała do głównego płomienia, czy do wewnętrznego ognika. Następnie, podczas wywołania funkcji
Particle::init(), nastepuje określenie pozycji startowej każdej cząsteczki, z uwzględnieniem jej stanu zmiennej
wewn. Cząsteczki płomienia głównego rodzą się w źródle głównym zaczepionym w początku układu współrzędnych,
natomiast cząsteczki ognika rodzą się w źródle wewnętrznym poruszającym się zgodnie z równaniami:
• dX = n ∗ cos(ϕ),
• dY = n ∗ sin(ϕ),
• dZ = 3n2 ,
gdzie:
• ϕ+ = współczynnik * rand()/RAND MAX,
• n+ = V ∆t +
(a+a1 )(∆t)2
,
2
• V + = (a + a1 )∆t,
• a = −|n| - moc przyciągania,
• a1 = rand()/RAND MAX - moc uciekania.
2
3.3
Proces animacji
3.3
4
INTERFEJS GRAFICZNY
Proces animacji
Najważniejszą z napisanych funkcji jest Particle::animate(), ponieważ to ona odpowiada za animowanie ruchu
cząsteczek. Pierwsza część funkcji obejmuje proces zmiany składowych prędkości cząsteczki, natomiast do drugiej
części należy wyliczenie nowej pozycji elementu.
Proces zmiany prędkości podzielony jest na trzy przypadki:
• normalny - kiedy żaden z przycisków nie jest aktywny,
• dmuchniecia - kiedy aktywny jest przycisk ’Dmuchnij’,
• rozproszenia - kiedy aktywny jest przycisk ’Rozprosz’.
W przypadku normalnym, w każdym wywołaniu funkcji animate() zwiększana jest pionowa prędkość cząsteczki
(składowa z). Każda cząsteczka otrzymuje również prędkości poziome (składowe x i y). w zależności od tego
czy dana cząsteczka należy do głównego płomienia czy wewnętrznego ognika wartości te różnią się (ognik musi
być węższy i dłuższy). Następnie losowo wybrane cząsteczki mogą otrzymać dużo większą prędkość pionową
lub odznaczenie zmiennej losowa . w momencie, gdy któraś z cząsteczek posiada niezerową wartość zmiennej
losowa w każdym wywołaniu funkcji animate() przyrost jej prędkość pionowej jest zmniejszany, natomiast
zwiększane są prędkości poziome.
Podczas gdy aktywny jest tryb dmuchnięcia do trybu normalnego dodane jest sukcesywne zmniejszanie prędkości
pionowej i zwiększanie poziomej na różnych wysokościach płomienia.
W przypadku rozproszenia funkcja animate() przestaje modyfikować składowe prędkości cząsteczki, dlatego
jedyną prędkością jaka pozostaje jest prędkość inicjacyjna.
4
Interfejs graficzny
Interfejs graficzny składa się z dwóch okien, głównego okna aplikacji oraz okna pomocy wywoływanego przy
pomocy klawisza H.
Okno główne (rys.1) składa się z dwóch części:
• pola animacji, wewnątrz którego można przy pomocy myszy sterować kamerą,
• panelu administracyjnego, który pozwala użytkownikowi wpływać na zachowanie animacji.
Rysunek 1: Okno główne.
Okno pomocy (rys.2) składa się z trzech zakładek:
3
7
EFEKTY PRACY
• opisu projektu,
• tabeli objaśniającej skróty klawiaturowe,
• tabeli sprzedstawiającej możliwości sterowania oknem przy pomocy myszy.
Rysunek 2: Okno pomocy
5
Diagram klas
Diagram klas wykonano w programie Software Ideas Modeler i przedstawiono na rysunku 3.
6
Diagram przepływu sterowania
Diagram przepływu sterowania również wykonano w programie Software Ideas Modeler i przedstawiono na
rysunku 4.
7
Efekty pracy
Możliwości aplikacji najlepiej przedstawiają rysunki ilustrujące wpływ elementów panelu administracyjnego na
okno animacji.
7.1
Suwak
Suwak umieszczony w części panelu administracyjnego pozwala na zmianę wysokości płomienia, co przedstawiono
na rysunku 5.
7.2
Przycisk ’Dmuchnij’
Przycisk pozwala na zasymulowanie strumienia wiatru skierowanego na płomień. Podmuch jest aktywny do
momentu ponownego wciśnięcia przycisku. Rysunek 6 przedstawia wywołanie opisanej akcji.
4
7.3
Przycisk ’Rozprosz’
8
WNIOSKI I PODSUMOWANIE
Rysunek 3: Diagram klas w języku UML.
7.3
Przycisk ’Rozprosz’
Przycisk pozwala na zasymulowanie wybuchu płomienia, pozostawiającego jedynie tlącą się podstawę. Podobnie
jak w przypadku przycisku ’Dmuchnij’ pierwsze wciśnięcie uruchamia akcję, natomiast kolejne ją wyłącza.
Rysunek 7 obrazuje wywołanie opisanej akcji.
7.4
Pola wyboru
Zaznaczenie każdego z dostępnych pól wyboru powoduje wywołanie jednej z akcji dostępnych w klasie QGLViewer.
Dodatkowo włączenie którejś z tych akcji przy pomocy klawiatury, powoduje odznaczenie odpowiedniego pola
wyboru.
Dostępne pola wyboru to:
• FPS - wyświetla częstotliwość animacji,
• Grid - rysuje siatkę w płaszczyźnie XY,
• Axis - rysuje osie X,Y oraz Z.
Wynik zaznaczenia dostępnych pól wyboru przedstawia rysunek 8.
8
Wnioski i podsumowanie
Na rynku istnieje bardzo dużo programów służących do tworzenia wizualizacji i animacji zarówno dwu- jak
i trójwymiarowych. Wybór jednego z nich, odpowiedniego do zrealizowania projektu, okazał się być najtrudniejszym
zadaniem projektowym. Warto jednak było poświęcić więcej czasu na dobór środowiska pracy, ponieważ odpowiednie
oprogramowanie pozwoliło na sprawne zrealizowanie pozostałych punktów harmonogramu, czyli stworzenie
5
8
WNIOSKI I PODSUMOWANIE
Rysunek 4: Diagram przepływu sterowania dla aplikacji.
głównego elementu projektu - aplikacji.
Praca z biblioteką QGLViewer daje ogromne możliwości w zakresie tworzenia obrazów i animacji trójwymiarowych.
Ze względu na bardzo dużą liczbę funkcji dostępnych w klasach tej biblioteki początkowa faza tworzenia własnej
aplikacji przysparza wielu problemów, jednak jest to zrekompensowane dostępnymi przykładami, których kod
pozwala na szybsze rozeznanie się w możliwościach biblioteki. Inaczej jest w przypadku programu QT4 Designer,
który już po krótkim wprowadzeniu pozwala na szybkie i sprawne tworzenie graficznych interfejsów użytkownika.
6
8
WNIOSKI I PODSUMOWANIE
Rysunek 5: Ilustracja działania suwaka.
Rysunek 6: Akcja spowodowana naciśnięciem przycisku ’Dmuchnij’.
7
8
WNIOSKI I PODSUMOWANIE
Rysunek 7: Akcja spowodowana naciśnięciem przycisku ’Rozprosz’.
Rysunek 8: Ilustracja działania pól wyboru.
8