15 (488)











Tworzenie mgły

UWAGA: Poniższe informacje dotyczące mgły nie zostały sprawdzone w praktyce bowiem mój plik opengl32.dll nie chce wyświetlać mgły(chociaż w grach owa mgła jest), wiec nie miałem gdzie tego sprawdzić.

Definicje mgły wprowadzamy do procedury inicjującej InitGL();[Oczywiście można to zrobić też w każdym innym momencie programu]. Stosujemy do tego celu dwa polecenia o składniach:

void glFogf( GLenum pname,
GLfloat param );
void glFogi( GLenum pname,
GLint param )
Gdzie:

pname - nazwa parametru który będziemy zmieniać
param - wartość parametru(należy zauważyć, że niektóre parametry "pname" wymagają podania wartości typu INT wtedy stosujemy polecenie glFogi, a niektóre wartości typu FLOAT, wtedy stosujemy polecenie glFogf).

Oto niektóre z parametrów:

GL_FOG_MODE - tryb wyświetlania mgły. Parametr typu GLint tj. GL_LINEAR(najlepszy efekt mgły), GL_EXP(domyślnie, najsłabszy efekt mgły) lub GL_EXP2.
GL_FOG_DENSITY - gęstość mgły. Parametr typu GLint, będący liczbą.
GL_FOG_START - głębokość od której ma zacząć się mgła. Parametr typu GLint, będący liczbą. Domyślnie 0.0
GL_FOG_END - głębokość końca mgły. Parametr typu GLint, będący liczbą. Domyślnie 1.0
GL_FOG_COLOR - cztery liczby typu GLint określających kolor mgły. Domyślnie (0,0,0,0) [Kolejno R,G,B,A]

UWAGA:

Mgła GL_LINEAR jest mgłą liniową, jej intesywność liczona jest ze wzoru:

Mgła GL_EXP jest mgłą wykładniczą, jej intesywność liczona jest ze wzoru:

Mgła GL_EXP jest mgłą wykładniczą, jej intesywność liczona jest ze wzoru:


gdzie:
end,start - parametry określone przez GL_FOG_START,GL_FOG_END
density - parametr określony przez GL_FOG_DENSITY
e- podstawa logarytmu naturalnego
d - głębokość (???)
f - wyznaczana intesywność mgły


Do ustalenia dokładności perspektywy mgły stosujemy polecenia glHint o składni:

glHint(GL_FOG_HINT, parametr);
gdzie :

parametr - określa sposób rysowania mgły, może być to:

GL_FASTEST - mało dokładnie, ale szybko
GL_NICEST - dokładnie, ale wolno
GL_DONT_CARE - pośrednie, bez żadnych preferencji


Na koniec należy włączyć mgłę poleceniem:
glEnable(GL_FOG);
Przykładowy kod inicjujący mgłę może wyglądać jak poniżej:

GLfloat fogColor[4]= {0.5f, 0.5f, 0.5f, 0.5f};
glClearColor(0.5f,0.5f,0.5f,1.0f);
glFogi(GL_FOG_MODE,GL_EXP2);
glFogfv(GL_FOG_COLOR, fogColor);
glFogf(GL_FOG_DENSITY, 0.07f);
glHint(GL_FOG_HINT, GL_FASTEST);
glFogf(GL_FOG_START, -5.0f);
glFogf(GL_FOG_END, 135.0f);
glEnable(GL_FOG);

Polecenie glClearColor ustawia kolor tła(dla polecenia glClear();) podawany jako jego cztery parametry. Jego składnia jest następująca:

void glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );
gdzie:

red, green, blue, alpha - składowe R,G,B,A definiujące kolor tła który chcemy uzyskać(standardowo 0,0,0,0);

Teraz, żeby wyczyścić tło użyj polecenie glClear();.



Przykładową mgłę przedstawia powyższy obrazek.

Mgła - jak to działa i co to jest?
Odpowiedź jest bardzo prosta, jest to cieniowanie wielokątów zależne od ich
współrzędnej Z(im obiekt położony dalej[Z większe] tym bardziej nasycany kolorem gły).
Dzięki temu mgłę możemy włączać dla określonych obiektów i po ich narysowaniu wyłączyć.
Dzięki temu mgła w naszej scenie będzie występować tylko w danych obszarach.
Np. mamy scenę dolną i górną do której wchodzi się po schodach. Mgłą pokrywamy tylko scenę
dolną. Da to efekt, że gdy wejdziemy na scenę górną i spojrzymy na dolną odniesiemy wrażenie że jesteśmy ponad
mgłą.






Wyszukiwarka

Podobne podstrony:
15 3
15
Program wykładu Fizyka II 14 15
15 zabtechnŁódzkiego z
311[15] Z1 01 Wykonywanie pomiarów warsztatowych
15 Wykonywanie rehabilitacyjnych ćwiczeń ortoptycznychid247
10 15 58
15 7 2012
ComboFix 15 1 22 2 2015r

więcej podobnych podstron