6 Programowanie Grafiki Komputerowej
Transkrypt
6 Programowanie Grafiki Komputerowej
Laboratorium nr 6 Instrukcja Laboratoryjna 6 1/2 Programowanie Grafiki Komputerowej Temat: System cząstek Przygotował: mgr inż. Grzegorz Pawiński 1) System cząstek Systemy cząstek wykorzystuje się do modelowania różnych zjawisk fizycznych. Ideą systemu cząstek jest zdefiniowanie dla pojedynczej cząstki cech fizycznych, tj. czas życia, kolor, położenie, wektor ruchu oraz grawitacja. Następnie tworzy się zbiór cząstek o tych samych cechach fizycznych, które mają symulować określone zjawisko. Niezależnie od zjawiska, cząstka może być reprezentowana za pomocą punktów, sprajtów punktowych, wielokątów lub wielokątów z teksturami. 1.1) Odległość punktu od obserwatora Wielkość punktu nie jest zależna od jego odległości od obserwatora. Aby system cząstek wyglądał bardziej naturalnie, należy wykorzystać funkcję modyfikującą wielkość punktów w zależności od położenia w przestrzeni. void glPointParameter*(GLenum pname, Glfloat value); Parametr pname Znaczenie GL_POINT_SIZE_MIN Minimalna wartość punktu po przekształceniach GL_POINT_SIZE_MAX Maksymalna wartość punktu po przekształceniach GL_POINT_FADE_THRESHOLD_SIZE Wartość używana do zmiany wielkości punktu oraz do zmiany składowej alfa koloru punktu GL_POINT_DISTANCE_ATTENUATION Wielkość punktu określona wzorem: 1 rozmiar= pointSize⋅ , ab⋅d c⋅d 2 a, b, c – przekazywane parametry, d – odległość od obserwatora pointSize – wielkość ustawiona przez glPointSize() GL_POINT_SPRITE_COORD_ORIGIN Określa, czy lewy górny róg sprajtu punktowego ma odpowiadać lewemu górnemu rogowi tekstury. Warto włączyć antyalising punktów, aby otrzymać lepsze efekty. Można go aktywować funkcją glEnable() przekazując jej parametr GL_POINT_SMOOTH. Laboratorium nr 6 1.2) 2/2 Sprajty punktowe Sprajty lub duszki punktowe pozwalają na przypisywanie tekstury dwuwymiarowej do punktu. Aby skorzystać ze sprajtów punkotowych należy je napierw aktywować funkcją glEnable() przekazując jej parametr GL_POINT_SPRITE. Do środowiska obsługi tekstur została dodana obsługa sprajtów. Możemy określić, czy współrzędne tekstur będą zastępowane współrzędnymi sprajtów punktowych: glTexEnvf (GL_POINT_SPRITE,GL_COORD_REPLACE,GL_TRUE); 1.3) Struktura cząstki typedef struct { bool active; // cząstka aktywna (True/False) GLfloat life; // czas życia [0,1] GLfloat fade; // szybkość zanikania [0,1] // wartośc kolorów GLfloat r; GLfloat g; GLfloat b; // położenie GLfloat x; GLfloat y; GLfloat z; // wektor ruchu GLfloat xr; GLfloat yr; GLfloat zr; // wektor grawitacji GLfloat xg; GLfloat yg; GLfloat zg; } particles; 1.4) Zachowanie cząstki • czas życia skracany jest o wartość fade, aż do zera, • jeśli czas życia cząstki wygasł, ustawiane są jej wartości początkowe, • położenie zmieniane jest w najprostszym przypadku według wzoru: polożenie = położenie + wektor ruchu + wektor grawitacji • Parametry każdej cząstki muszą być zmieniane co pewien określony czas.