15 

po polsku


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³±.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • pajaa1981.pev.pl