Trójwymiarowa wizualizacja danych przestrzennych

Transkrypt

Trójwymiarowa wizualizacja danych przestrzennych
Marek Kulawiak – Katedra Systemów Geoinformatycznych, Wydział ETI
Trójwymiarowa wizualizacja
danych przestrzennych
Laboratorium 6. Systemy cząsteczkowe
1
Marek Kulawiak – Katedra Systemów Geoinformatycznych, Wydział ETI
Wprowadzenie
Systemy cząsteczkowe (ang. particle systems) są popularną metodą symulowania niektórych
zjawisk fizycznych, takich jak dym czy eksplozje. Technika ta polega na tworzeniu danego
efektu za pomocą wielu małych obiektów, które wspólnie układają się w większą całość.
W celu uzyskania zadowalających rezultatów, w systemach cząsteczkowych często stosuje się
tzw. billboardy, czyli płaskie, prymitywne obiekty, które są zawsze zwrócone przodem
w kierunku kamery.
Celem niniejszego ćwiczenia laboratoryjnego będzie rozwinięcie prostego systemu
cząsteczkowego reprezentującego ogień. Struktura projektu startowego jest podobna jak
w poprzednim ćwiczeniu. Efekt ognia jest realizowany za pomocą następujących klas:
•
•
FireParticle: klasa ta stanowi reprezentację pojedynczej cząsteczki ognia – zwróć
uwagę, że nie nadpisuje ona metody draw()
FireEmitter: klasa ta jest odpowiedzialna za inicjalizację i rysowanie cząsteczek
ognia – klawisze 1 oraz 2 umożliwiają przełączanie pomiędzy dwoma dostępnymi
trybami rysowania: oteksturowanym i nieoteksturowanym
Zadanie 1. (1 punkt)
Zmodyfikuj odpowiednio źródło klasy FireParticle, aby każda cząsteczka ognia z początku
była żółta, a wraz ze spadkiem swojej energii stawała się coraz bardziej czerwona.
Wskazówka: modyfikuj tylko zieloną składową koloru cząsteczki
Zadanie 2. (1 punkt)
Przepisz kod klasy FireParticle w taki sposób, żeby cząsteczki ognia po zgaśnięciu zmieniały
się w cząsteczki dymu. Cząsteczki dymu powinny:
•
•
•
być szare i półprzezroczyste
pojawiać się i znikać wolniej niż cząsteczki ognia
poruszać się szybciej od cząsteczek ognia
Zadanie 3. (0,5 punktu)
(Wymaga wykonania zadania 2.)
Zmodyfikuj program w taki sposób, żeby cząsteczki dymu były zauważalnie większe od
cząsteczek ognia.
Zadanie 4. (1 punkt)
Zmodyfikuj odpowiednio plik źródłowy klasy FireParticle, aby cząsteczki reagowały na
wiatr określony przez klasę Weather. Pamiętaj, że wiatr powinien w większym stopniu
wpływać na cząsteczki dymu niż ognia. Prędkość wiatru można modyfikować za pomocą
strzałek na klawiaturze numerycznej oraz za pomocą klawiszy PageUp i PageDown.
2
Marek Kulawiak – Katedra Systemów Geoinformatycznych, Wydział ETI
Zadanie 5. (0,5 punktu)
Dodaj możliwość zmieniania wartości zmiennej numberOfParticles w klasie WorldMain bez
konieczności przekompilowywania programu. Metoda wykonania dowolna: możesz to zrobić
np. za pomocą pliku konfiguracyjnego albo parametru przekazywanego w funkcji main.
Zadanie 6. (1 punkt)
(Wymaga wykonania zadania 5.)
Spraw, aby prędkość ruchu i znikania cząsteczek był niezależny od częstotliwości rysowania
sceny (FPS). W tym celu dodaj do programu publiczną zmienną statyczną, której wartość
będzie ustawiana pod koniec działania metody display w klasie WorldMain. Zmienna ta
powinna przyjmować wartość różnicy czasowej pomiędzy aktualnym a poprzednim
zakończeniem rysowania sceny, przeskalowanej w taki sposób, żeby w przypadku rysowania
60 klatek na sekundę zmienna ta miała wartość 1.0. Następnie zmodyfikuj kod klasy
FireParticle w taki sposób, żeby wszelkie zmiany energii oraz położenia cząsteczek były
przemnażane przez wartość tej zmiennej.
Wskazówki:
•
•
•
do wyznaczania wyżej opisanej zmiennej użyj następującego wzoru:
różnica_czasowa_w_sekundach = (aktualny_czas - poprzedni_czas) * 0.00000006
dokonuj pomiarów czasu z użyciem metody System.nanoTime()
w celu testowania poprawności rozwiązania zmieniaj liczbę cząsteczek ognia w taki
sposób, żeby znacząco wpływały one na liczbę wyświetlanych klatek na sekundę
Przykładowe zadania poprawkowe:
1. Spraw, aby liczba cząsteczek była modyfikowalna w czasie działania programu (np.
w wyniku wciśnięcia jakiegoś klawisza). (1 punkt)
2. Przepisz uzyskany efekt cząsteczkowy w taki sposób, żeby zamiast ognia symulował
on eksplozję lub jakieś inne. (do 5 punktów wg subiektywnej oceny prowadzącego)
Dodatkowe informacje
1. The Nature of Code: Particle Systems: http://natureofcode.com/book/chapter-4particle-systems/
2. NeHe Productions: Billboarding How To:
http://nehe.gamedev.net/article/billboarding_how_to/18011/
3. Billboarding Tutorial: http://www.lighthouse3d.com/opengl/billboarding/index.php
3