Arkanoid 3D krok po kroku II

26.04.2010 - Olgierd Humeńczuk
TrudnośćTrudność

Źródło światła


Rys 5. Rodzaje świateł. a.) punktowe b.) stożkowe c.) kierunkowe

Korzystając z modelu oświetlenia biblioteki Open GL, możemy użyć trzech różnych źródeł światła Rys. 5. Światła te mają za zadanie symulować podstawowe rodzaje świateł jakie możemy spotkać w rzeczywistości:


  • punktowe - najczęściej używane by modelować małe źródła światła , takie, które świecą we wszystkich kierunkach równomiernie; najczęściej sztuczne, takie jak:
    • żarówka
    • pochodnia
  • stożkowe - używane by modelować źródła świateł, które mają ograniczony kąt świecenia:
    • latarka
    • reflektor
    • lampa
  • kierunkowe - najczęściej używane by modelować źródła świateł znajdujących się bardzo daleko od obserwatora np. słońca.

Na początek stwórzmy światło punktowe. W tym celu napiszmy funkcję która ustawi wymagane parametry dla takiego rodzaju światła.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void setPointLight( 
    GLEnum id,
    GLFloat position[ 4 ],
    GLfloat ambient_col[ 4 ],
    GLFloat diffuse_col[ 4 ],
    GLFloat specular_col[ 4 ] )
{
    glEnable( id );
 
    glLightfv( id, GL_AMBIENT, ambient_col );
    glLightfv( id, GL_DIFFUSE, diffuse_col );
    glLightfv( id, GL_SPECULAR, specular_col );
    glLightfv( id, GL_POSITION, position );
}    

Przyjrzyjmy się jej:

  • pierwsza linijka to włączenie światła o podanym w parametrze numerze id. W bibliotece Open GL mamy do dyspozycji ograniczoną liczbę świateł - osiem - o numerach od 0 do 7. GL_LIGTH0, GL_LIGTH1, ... GL_LIGTH7
  • w następnych liniach ustawiamy podane parametry, które określają własności źródła światła

Własności źródła światła

W Open GL wyróżniamy trzy podstawowe własności, wspólne dla wszystkich typów świateł:

  • kolor światła otoczenia ( ambient color ) używany by symulować światło odbite od wszystkich elementów otoczenia, inaczej: kolor dominujący w scenie
  • kolor światła rozproszonego ( diffuse color ) to kolor światła, które równomiernie odbija się od powierzchni obiektów ( do obliczenia natężenia tej składowej używa się kąta między promieniami światła a powierzchnią na którą padają )
  • kolor światła odbitego ( specular color ) to kolor światła, które odbija się od powierzchni obiektów ( w obliczeniach dodatkowo bierze się pod uwagę kąt pod jakim znajduje się linia wzroku obserwatora względem oświetlanej powierzchni ) powodując tzw. refleksy światła

Materiał

Gdybyśmy teraz włączyli nasze światło, sześcian zmieniłby kolor, ale kolor ten pokryłby wszystkie ściany jednolicie. Aby liczenie oświetlenia zadziałało, musimy dostarczyć bibliotece Open GL potrzebne informacje o materiale, jakim pokryty jest obiekt. Kod realizujący tę funkcjonalność do złudzenia przypomina kod służący ustawieniu parametrów światła.

1
2
3
4
5
6
7
8
9
10
11
12
void setMaterial(
    GLfloat ambient_col[ 4 ],
    GLfloat diffuse_col[ 4 ],
    GLfloat specular_col[ 4 ],
    GLfloat shiness )
{
    glMaterialfv( GL_FRONT, GL_AMBIENT, ambient_col );
    glMaterialfv( GL_FRONT, GL_DIFFUSE, diffuse_col );
    glMaterialfv( GL_FRONT, GL_SPECULAR, specular_col );
 
    glMaterialf( GL_FRONT, GL_SHININESS, shiness );
}

Parametr shiness odpowiada za intensywność połysku. Dzięki niemu możemy modelować wszystkie błyszczące materiały ( od metalu po porcelanę ). Pozostałe parametry mają znaczenie podobne do parametrów światła, tyle że dotyczą zachowania światła w zetknięciu z materiałem.

4.666665
Twoja ocena: Brak Ocena: 4.7 (3 ocen)

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com