Z mapami światła i cienia

Podobne dokumenty
Zadanie 1. Ściana. 1. Potrzebne zmienne w dołączonym do zadania kodzie źródłowym

OpenGL Światło (cieniowanie)

OpenGL Światło (cieniowanie)

Opis kształtu w przestrzeni 2D. Mirosław Głowacki Wydział Inżynierii Metali i Informatyki Przemysłowej AGH

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Rozdział 21, który przedstawia zastosowanie obliczeń wysokiej wydajności w numerycznej algebrze liniowej

Dynamiczne struktury danych: listy

ALGORYTM STRAŻAKA W WALCE Z ROZLEWAMI OLEJOWYMI

Przykładowe zadania z matematyki na poziomie podstawowym wraz z rozwiązaniami

J. Szantyr - Wykład nr 30 Podstawy gazodynamiki II. Prostopadłe fale uderzeniowe

WYBÓR FORMY OPODATKOWANIA PRZEDSIĘBIORSTW NIEPOSIADAJĄCYCH OSOBOWOŚCI PRAWNEJ

Projekt 9 Obciążenia płata nośnego i usterzenia poziomego

Analiza nośności pionowej pojedynczego pala

Plan wykładu. Akcelerator 3D Potok graficzny

( n) Łańcuchy Markowa X 0, X 1,...

2 Przygotował: mgr inż. Maciej Lasota

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

Janusz Górczyński. Prognozowanie i symulacje w zadaniach

4. Zależności między współrzędnymi tłowymi i terenowymi

Obóz Naukowy Olimpiady Matematycznej Gimnazjalistów

Rysunek 1: Okno timeline wykorzystywane do tworzenia animacji.

Metody doświadczalne w hydraulice Ćwiczenia laboratoryjne. 1. Badanie przelewu o ostrej krawędzi

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

WYKŁAD 1 WPROWADZENIE DO STATYKI PŁYNÓW 1/23

MECHANIK NR 3/

Laboratorium Metod i Algorytmów Sterowania Cyfrowego

Grafika Komputerowa 3D Etap drugi

Metody doświadczalne w hydraulice Ćwiczenia laboratoryjne. 1. Badanie przelewu o ostrej krawędzi

Porównanie nacisków obudowy Glinik 14/35-POz na spąg obliczonych metodą analityczną i metodą Jacksona

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

Rendering sceny z modelem węzła

Ćwiczenie 4. Wyznaczanie poziomów dźwięku na podstawie pomiaru skorygowanego poziomu A ciśnienia akustycznego

Wskaźniki i struktury. Programowanie C, LA Anna Gogolińska

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania. Systemy sterowania i wspomagania decyzji

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Ćw. 11 Wyznaczanie prędkości przepływu przy pomocy rurki spiętrzającej

Grafika Komputerowa 3D Etap drugi

Tekstury. Dorota Smorawa

138 Forum Bibl. Med R. 4 nr 1 (7)

Programowanie gier komputerowych Tomasz Martyn Wykład 6. Materiały informacje podstawowe

Stan wilgotnościowy przegród budowlanych. dr inż. Barbara Ksit

Mapowanie sześcienne otoczenia (cubic environment mapping)

Materiały. Dorota Smorawa

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

OpenGL teksturowanie

Trójwymiarowa grafika komputerowa rzutowanie

Komentarz 3 do fcs. Drgania sieci krystalicznej. I ciepło właściwe ciała stałego.

Instrukcja do laboratorium z fizyki budowli. Ćwiczenie: Pomiar i ocena hałasu w pomieszczeniu

Bartosz Bazyluk SYNTEZA GRAFIKI 3D Grafika realistyczna i czasu rzeczywistego. Pojęcie sceny i kamery. Grafika Komputerowa, Informatyka, I Rok

Wykład 4. Rendering (1) Informacje podstawowe

Rysunek 1 Przykładowy graf stanów procesu z dyskretnymi położeniami.

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Pracownia elektryczna i elektroniczna

Obszar Logistyka. Rejestracja faktury zakupowej Rejestracja faktury zakupowej z pozycjami towarowymi. Instrukcja użytkownika

KOMPUTEROWA SYMULACJA RUCHU CIAŁA SZTYWNEGO. WSPÓŁCZYNNIK RESTYTUCJI

6 6.1 Projektowanie profili

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

Zaawansowana Grafika Komputerowa

GLOBALNE OBLICZANIE CAŁEK PO OBSZARZE W PURC DLA DWUWYMIAROWYCH ZAGADNIEŃ BRZEGOWYCH MODELOWANYCH RÓWNANIEM NAVIERA-LAMEGO I POISSONA

Wypełnianie kolorem lub deseniem

Ćw. 1 Wyznaczanie prędkości przepływu przy pomocy rurki spiętrzającej

Roboty Przemysłowe. 1. Pozycjonowane zderzakowo manipulatory pneumatyczne wykorzystanie cyklogramu pracy do planowania cyklu pracy manipulatora

Ćwiczenie nr 5 i 6 Przygotowanie dokumentacji technicznej dla brył

Animowana grafika 3D Laboratorium 3

1. Prymitywy graficzne

Animowana grafika 3D. Opracowanie: J. Kęsik.

Teoria informacji i kodowania Ćwiczenia Sem. zimowy 2016/2017

Animowana grafika 3D. Opracowanie: J. Kęsik.

Metody i analiza danych

ODPOWIEDZI NA PYTANIA. Dotyczy przetargu nieograniczonego na zakup sterylizatora parowego w formie leasingu finansowego (znak sprawy 75/13)

Rzutowanie z 4D na 3D

Zjawisko Comptona opis pół relatywistyczny

Systemy wirtualnej rzeczywistości. Podstawy grafiki 3D

TERMODYNAMIKA PROCESOWA I TECHNICZNA

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do

Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii. Instrukcja do zajęć laboratoryjnych z przedmiotu METROLOGIA

Pracownia elektryczna i elektroniczna

Mini-quiz 0 Mini-quiz 1

Mamy co prawda trawiastą powierzchnię ziemi i niebo, ale scena wygląda mało realistycznie. Zmieńmy nieco właściwości tekstury płaszczyzny gruntu:

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Synteza i obróbka obrazu. Tekstury. Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych

PROSTA I ELIPSA W OPISIE RUCHU DWU CIAŁ

Inventor 2016 co nowego?

Wstawianie nowej strony

OpenGL przezroczystość

WYKŁAD 14 PROSTOPADŁA FALA UDERZENIOWA

Grafika 3D program POV-Ray - 1 -

Ćwiczenie 4 - Podstawy materiałów i tekstur. Renderowanie obrazu i animacji

2.14. Zasada zachowania energii mechanicznej

Tworzenie i modyfikacja modelu geologicznego

Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania.

Słowa kluczowe: symulator, model rozproszony diody półprzewodnikowe, obliczenia rozproszone, Java, CORBA

Animacje cz. 2. Rysujemy koło zębate

EUROELEKTRA Ogólnopolska Olimpiada Wiedzy Elektrycznej i Elektronicznej Rok szkolny 2014/2015. Zadania z teleinformatyki na zawody III stopnia

OpenGL : Oświetlenie. mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski. Szczecin, r 1/23

Badanie maszyn elektrycznych prądu przemiennego

WYRÓWNOWAŻANIE MAS W RUCHU OBROTOWYM

Entalpia swobodna (potencjał termodynamiczny)

METODY INŻYNIERII WIEDZY KNOWLEDGE ENGINEERING AND DATA MINING

Transkrypt:

May światła i cienia. W tym zadaniu dany jest rojekt, renderujący scenę rzedstawiającą okój z bujającą się lamą zawieszoną od sufitem. Pierwszym zadaniem będzie rzutowanie ersektywiczne tekstury światła (białe koło z rozmytym brzegiem na czarnym tle) na całą scenę, zgodnie z aktualnym ołożeniem lamy. Drugim zadaniem będzie dodanie cieni rzy omocy ma cienia. Wykorzystanie may cienia w scenie rzebiega analogicznie jak wykorzystanie may światła. Dlatego druga część srowadza się głównie do odowiedniego zainicjowania arametrów tekstury oraz wyrenderowania jej zawartości (scena widziana z ozycji lamy) i skoiowaniu do obiektu may cienia. Bez ma światła i cienia Z maami światła i cienia Do uzuełnienia są nastęujące funkcje w liku lightma.c: część 1: enable_texgen(), disable_texgen(), render_begin(), render_end() część 2 (dodatkowo): shadow_init(), shadow_begin(), shadow_end(), render_begin(), render_end() W funkcji dislay() (której nie należy modyfikować) w liku main.c wywoływane są w odowiedniej kolejności funkcje związane z renderowaniem. Mimo, że jest ona dość nieczytelna trzeba wsomnieć, że realizacja cieni odbywa się w trzech rzebiegach: A) Renderowana jest cała scena z ozycji światła (maa cienia) B) Renderowana jest cała scena z ustawionym rzyciemnionym oświetleniem C) Renderowana jest cała scena z użyciem may światła i may cienia oraz jasnym oświetleniem. Włączone jest mieszanie z funkcją maximum. May cienia zwracają kolor czarny dla obiektów w cieniu. Powyższy zabieg srawia, że obiekty w cieniu nie są zuełnie czarne tylko rzyciemnione.

1. Generowanie wsółrzędnych tekstury (funkcje enable_texgen() oraz disable_texgen()) Persektywiczne rzutowanie tekstur bardzo rzyomina w realizacji rzutowanie wierzchołków na ekran. Mamy daną macierz rzekształcenia do układu rojektora (w tym wyadku lamy) i macierz rzutowania ersektywicznego. Przekształcamy wierzchołki sceny rzez obie macierze i wykonujemy dzielenie ersektywiczne. W rzyadku tekstur musimy jeszcze rzesunąć i rzeskalować wynik, onieważ zakres wsółrzędnych tekstury jest inny niż zakres wsółrzędnych okna widoku (dla okna widoku każda ze wsółrzędnych, włącznie z głębokością, jest z zakresu [-1,1]; dla tekstury każda ze wsółrzędnych, włącznie z głębokością w rzyadku ma cienia, jest z zakresu [0,1]). Przy rzutowaniu ersektywicznym otrzebne są cztery wsółrzędne tekstury: S, T, R i Q. Dzielenie ersektywiczne zostanie rzerowadzone automatycznie, jeśli tylko dana będzie wartość czwartej wsółrzędnej. Na oczątek włączymy generowanie wsółrzędnych rzez OenGL tak, aby za wsółrzędne tekstury rzyjmowane były wsółrzędne wierzchołków w układzie sceny (świata). Realizuje to oniższy ciąg instrukcji: matrix44 identity = IdentityMatrix44(); gltexgeni(gl_s, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); gltexgeni(gl_t, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); gltexgeni(gl_r, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); gltexgeni(gl_q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); gltexgenfv(gl_s, GL_EYE_PLANE, (float*)&(identity[0].x)); gltexgenfv(gl_t, GL_EYE_PLANE, (float*)&(identity[1].x)); gltexgenfv(gl_r, GL_EYE_PLANE, (float*)&(identity[2].x)); gltexgenfv(gl_q, GL_EYE_PLANE, (float*)&(identity[3].x)); glenable(gl_texture_gen_s); glenable(gl_texture_gen_t); glenable(gl_texture_gen_r); glenable(gl_texture_gen_q); Komentarz do owyższego kodu Mimo, że tryb generowania wsółrzędnych tekstury jest ustawiony na GL_EYE_LINEAR, co może sugerować układ kamery, otrzymane wsółrzędne będą wyrażały ołożenie wierzchołków w układzie sceny (świata). Dzieje się tak, onieważ równania GL_EYE_PLANE (macierz identyczności w tym rzyadku) są mnożone z rawej strony rzez odwrotność macierzy GL_MODELVIEW ustawionej w trakcie wywoływania owyższych instrukcji. Rezultatem będzie rzejście z układu kamery do

układu sceny. Zamiast GL_EYE_LINEAR, można byłoby wybrać tryb GL_OBJECT_LINEAR; wtedy otrzymalibyśmy wsółrzędne w układzie lokalnym obiektu, ale dla każdego obiektu inna byłaby macierz rzutowania do układu lamy. Trzeba jeszcze ustalić rzekształcenie dla wsółrzędnych tekstury z układu sceny do układu lamy: matrix44 mattexture = ScaleMatrix44(0.5f, 0.5f, 0.5f) * TranslateMatrix44(1.0f,1.0f,1.0f) * matprojection * matmodelview; glmatrixmode(gl_texture); glloadmatrixf((float*)(&mattexture[0][0])); glmatrixmode(gl_modelview); Macierze matmodelview oraz matprojection są zmiennymi statycznymi w rzestrzeni nazw LightMa w liku lightma.c. Ustalane są orawnie w innej części rogramu i rzechowują macierze rzekształcenia z układu sceny do układu lamy i rzutowania ersektywicznego związanego z lamą. W rogramie kąt ola widzenia zakodowany w macierzy rzutowania ersektywicznego można zmieniać oruszając myszą z wciśniętym środkowym rzyciskiem. Iloczyn ScaleMatrix44(0.5f, 0.5f, 0.5f) * TranslateMatrix44(1.0f,1.0f,1.0f) odowiada za liniowe odwzorowanie kostki [ 1,1 ] 3 w kostkę [ 0,1 ] 3, i jest niezbędny dla orawnego rzejścia do wsółrzędnych tekstury. Cały kod oisany owyżej owinien znaleźć się w funkcji enable_texgen(). Umieszczenie go w osobnej funkcji jest o tyle ważne, że będziemy ten sam kod wywoływać zarówno dla may światła jak i may cienia. Trzeba jeszcze wyełnić funkcję disable_texgen(). Jej zadanie do rzywrócić stan srzed enable_texgen(): wyłączyć generowanie wsółrzędnych tekstury dla S, T, R i Q; rzywrócić orzednią wartość macierzy rzekształcenia wsółrzędnych tekstury (można rzyjąć, że domyślnie jest to macierz identyczności); zostawić tryb macierzy OenGL ustawiony na GL_MODELVIEW (co jest w ozostałym kodzie rzyjmowane za domyślne ustawienie odczas rozmieszczania obiektów w scenie). 2. Włączenie teksturowania (funkcje render_begin() i render_end()) Zaczynamy od samej tekstury oświetlenia, ale otem dodamy do niej teksturę cienia, dlatego warto od razu rzygotować się na multiteksturowanie. Obiekty tekstur są już utworzone ich identyfikatory amiętane są w zmiennych statycznych tex_light (maa światła) i tex_shadow (maa cienia) w rzestrzeni nazw LightMa w liku lightma.c. Dla każdej z tekstur w funkcji render_begin() trzeba wykonać kolejno: Ustalić aktywny eta multiteksturowania (którego dotyczyć będą wszystkie kolejne instrukcje związane z teksturowaniem): glactivetexture(gl_texture0); (glactivetexture(gl_texture1); dla may cienia). Ustalić aktywny obiekt tekstury: glbindtexture(gl_texture_2d, tex_light); (glbindtexture(gl_texture_2d, tex_shadow); dla may cienia) Włączyć teksturowanie: glenable(gl_texture_2d); Włączyć generowanie wsółrzędnych tekstury: enable_texgen(); Ustalić oerację mieszania koloru tekstury: gltexenvi(gl_texture_env, GL_TEXTURE_ENV_MODE, GL_MODULATE); W funkcji render_end() trzeba cofnąć zmiany dla każdej z tekstur: ustalić aktywny eta teksturowania, wyłączyć generowanie wsółrzędnych tekstury, wyłączyć teksturowanie.

3. Projekcja wsteczna (orawka do funkcji render_begin() i render_end()) Istnieje ewna różnica omiędzy rzutowaniem geometrii na ekran i rzutowaniem geometrii w celu wygenerowania wsółrzędnych tekstury. W ierwszym rzyadku aktywnych jest sześć łaszczyzn obcinania geometrii. W drugim rzyadku nie. Dlatego maa światła i cienia na owyższym obrazie jest rzutowana zarówno na geometrię oniżej jak i owyżej lamy (jaśniejsze koło na suficie; w środku widać lamki cieni). Obiekty od lamą, które nie mieszczą się w ściętej iramidzie jej widoku, rzy ustawionym zawijaniu rzutowanych tekstur do brzegu, otrzymują z tekstury sensowne wartości kolorów/głębokości. Z obiektami o drugiej stronie lamy trzeba radzić sobie inaczej. Rozwiązaniem jest włączenie na czas rzutowania ersektywicznego tekstur dodatkowej łaszczyzny obcinania geometrii. Płaszczyzna zdefiniowana jest rzez czwórkę wartości rzeczywistych ( x, y, z, w ), gdzie ( x, y, z ) to wektor rostoadły do łaszczyzny, skierowany w stronę ółrzestrzeni, która nie zostanie odrzucona, zaś w jest tak dobrane, że dla dowolnego unktu ( x, y, z ) na łaszczyźnie zachodzi x x + y y + z z + w = 0. W rogramie równanie łaszczyzny zaisane jest w zmiennej statycznej clilane_light w rzestrzeni nazw LightMa w liku lightma.c. Ustalane jest orawnie w innej części rogramu. Aby włączyć łaszczyznę obcinania trzeba wkleić kod: double c[4] = {clilane_light.x, clilane_light.y, clilane_light.z, clilane_light.w}; glcliplane(gl_clip_plane0, c); glenable(gl_clip_plane0); Wyłączenie obcinania realizuje kod: gldisable(gl_clip_plane0);

4. Inicjowanie may cienia (funkcja shadow_init()) May cienia są secjalnym rozszerzeniem OenGL. Są to tekstury, które zachowują się jak bufor głębokości. Inicjując obiekt tekstury dla may cienia musimy: zdefiniować wymiary i ustalić odowiedni format tekstury, który mówi, że będzie to maa cienia glteximage2d( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, size_shadow, size_shadow, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0); W owyższej instrukcji: 1. arametr, to stała, która mówi, że mamy do czynienia z teksturą dwuwymiarową (w najnowszych kartach graficznych istnieje rozszerzenie ozwalające korzystać również z ma sześciennych cienia). 2. arametr to oziom mi i owinien być ustawiony na zero. 3. arametr to format may cienia: 24 bitowy bufor głębokości, (często jest wymagane, aby format był taki sam jak dla głównego bufora głębokości). 4. i 5. arametr to wymiary may cienia: stała size_shadow jest zdefiniowana w liku lightma.c (imlementacje OenGL dla dobrych kart graficznych nie wymagają aby były to otęgi dwójki, dla starszych kart może to być wymagane). Z owodu faktu, że będziemy koiować bufor głębokości związany z oknem widoku do may cienia, wymiary nie mogą być większe niż wymiary okna widoku (domyślnie 1024x1024). 6. arametr to szerokość brzegu i owinien być równy zero. 7. i 8. arametr związane są z formatem i dla 24-bitowego bufora głębokości owinny być równe: GL_DEPTH_COMPONENT i GL_UNSIGNED_INT. 9. arametr równy zero mówi, że nie definiujemy na razie zawartości may cienia. ustalić w jaki sosób będzie liczony kolor uzyskany w wyniku róbkowania may cienia gltexparameteri(gl_texture_2d, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); gltexparameteri(gl_texture_2d, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); gltexparameteri(gl_texture_2d, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE); Pierwsza z tych instrukcji mówi, że róbkowanie may cienia będzie olegało na orównaniu wartości trzeciej wsółrzędnej tekstury (wsółrzędne tekstury oznaczane są S, T, R i Q), z głębokością zaisaną w maie cienia. Druga instrukcja mówi, że test zwróci jeden, gdy wsółrzędna będzie mniejsza lub równa odczytanej głębokości i zero w rzeciwnym razie. Trzecia instrukcja mówi, że wynik testu zostanie zaisany we wszystkich czterech składowych koloru zwróconego w wyniku róbkowania tekstury. Komentarz na temat filtrowania ma cienia Ma cienia nie można filtrować w taki sam sosób jak zwykłych tekstur. Oznaczałoby to interolację liniową zaisanej głębokości, co rowadzi do nierawidłowych wyników i dlatego nie jest realizowane w żadnej imlementacji OenGL. Jednym z rozwiązań, wsomaganym często srzętowo, jest filtrowanie PCF (Percentage Closer Filtering), które olega na wykonaniu testu bufora głębokości w kilku unktach ołożonych blisko siebie i zwróceniu wartości średniej wyniku. Inne rozwiązanie roblemu filtrowania zaewniają wariacyjne may cienia (Variational Shadow Mas), ale są to rozwiązania dość złożone, gdyż wymagają użycia dwóch tekstur, z których jedna amięta głębokość, a druga kwadrat głębokości. Ostatecznie w rogramie ustawione jest filtrowanie liniowe, co ozwala mieć nadzieję, że tam gdzie PCF jest wsomagane srzętowo ewna rosta jego forma zostanie użyta.

5. Renderowanie zawartości may cienia (funkcje shadow_begin() i shadow_end()) Ten eta jest rawie identyczny jak renderowanie sceny do ojedynczej ściany sześciennej may środowiska. Trzeba w funkcji shadow_begin() odczytać i zachować wielkość okna widoku, ustawić wielkość okna widoku na rozmiary may cienia (size_shadow x size_shadow), ustawić odowiednie wartości macierzy GL_PROJECTION i GL_MODELVIEW. W shadow_end() należy skoiować bufor głębokości do may cienia, oraz rzywrócić rozmiary okna widoku, macierze GL_PROJECTION oraz GL_MODELVIEW srzed wywołania shadow_begin(). W funkcji dislay() w liku main.c między wywołaniami shadow_begin() i shadow_end() renderowana jest cała scena. Odczytanie wymiarów okna widoku (viewort jest zmienną statyczną w rzestrzeni nazw LightMa w liku lightma.c): glgetintegerv(gl_viewport, viewort); Ustawienie wymiarów okna widoku na wymiary w x h : glviewort(0,0,w, h); Skoiowanie bufora głębokości do may cienia: glbindtexture(gl_texture_2d, tex_shadow); glcoyteximage2d(gl_texture_2d, 0, GL_DEPTH_COMPONENT24, 0, 0, size_shadow, size_shadow, 0); Porawnie wyznaczone macierze GL_PROJECTION i GL_MODELVIEW dla lamy rzechowywane są w zmiennych statycznych matprojection i matmodelview w rzestrzeni nazw LightMa w liku lightma.c. Warto jeszcze odczas renderowania may cienia odsunąć całą geometrię od kamery (czyli lamy w tej sytuacji), tak, żeby błędy numeryczne odczas rzekształceń nie sowodowały otem, że obiekt rzuca cień na samego siebie. Tak więc ustawienie macierzy GL_MODELVIEW rzed renderowaniem may cienia owinno wyglądać nastęujaco: glloadidentity(); gltranslatef(.0f,.0f,-0.1f); glmultmatrixf((float*)(&matmodelview[0][0])); 6. Zakończenie (funkcje render_begin() i render_end()) Jeśli maa cienia jest orawnie inicjowana (shadow_init()) oraz głębokości obiektów widzianych z ozycji lamy są w niej zaisywane (shadow_begin() i shadow_end()), to dodanie cienia do may światła wymaga tylko uzuełnienia funkcji render_begin() i render_end() o oeracje analogiczne jak dla may światła owtórzone dla may cienia (atrz unkt 3.). May cienia są jedną z możliwych metod uzyskania cieni dla dynamicznej sceny. Inną oularną metodą są bryły cienia. Dla brył cienia uzyskuje się dużą dokładność wyznaczenia krawędzi cienia, odczas gdy dla ma cienia może ojawić się aliasing jego krawędzi (jego wielkość zależy tutaj od rozdzielczości may cienia oraz kąta między kierunkiem światła i kierunkiem atrzenia) i błędy określenia czy obiekt jest w cieniu dla łaszczyzn rawie równoległych do kierunku światła. Z kolei may cienia można wykorzystać w ołączeniu z teksturami zawierającymi maskę rzezroczystości (n. rostokąty rerezentujące liście na drzewie z nałożoną teksturą osiadającą odowiednią maskę rzezroczystości), zaś bryły cienia oerują wyłącznie na krawędziach geometrii sceny. Istnieje wiele odmian ma cienia, które orawiają ich recyzję (Traezoidal Shadow Mas, Persective Shadow Mas) oraz zaewniają lesze filtrowanie i rozmycie(variational Shadow Mas). Osobnym roblemem, ale również dość dobrze już oracowanym, jest liczenie realistycznych cieni dla świateł owierzchniowych oraz światła otaczającego dochodzącego ze wszystkich kierunków (Ambient Occlusion).