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