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 315Program wykładu Fizyka II 14 1515 zabtechnŁódzkiego z311[15] Z1 01 Wykonywanie pomiarów warsztatowych15 Wykonywanie rehabilitacyjnych ćwiczeń ortoptycznychid24710 15 5815 7 2012ComboFix 15 1 22 2 2015rwięcej podobnych podstron