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⋅
,
ab⋅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.