Raytracing: krok po kroku cz. 7 - doskonałe odbicie lustrzane
|
|
- Agata Małek
- 6 lat temu
- Przeglądów:
Transkrypt
1 Raytracing: krok po kroku cz. 7 - doskonałe odbicie lustrzane I. Co/Dlaczego? Jako że dodawanie kolejnych materiałów jest jednocześnie dość proste i powoduje szybkie efekty, spróbujemy w tej części pójść dalej w tym kierunku - ale prędzej czy później będzie trzeba wrócić do trudniejszych i bardziej nużących tematów... Więc co tym razem? Stworzymy materiał potrafiący odbijać światło. Koniec z czasami kiedy wygląd obiektu był niezależny od reszty świata - pojawią się teraz odbicia lustrzane pozwalające na nowe efekty. Materiał którym się zajmiemy będzie doskonałym materiałem lustrzanym odbijającym promienie bez najmniejszego rozproszenia. Nie jest to oczywiście rzecz możliwa w prawdziwym świecie, ale ostatecznie to samo dotyczy materiałów perfekcyjnie rozpraszających i modelu Phonga. II. Teoria Do tego momentu kolor cieniowanego punktu był zależny tylko od światła padającego na niego w prostej linii ze źródła - jest to tzw. direct illumination - bezpośrednie oświetlenie, jako że światło dociera do punktu bezpośrednio. W tym momencie spotykamy się z indirect illumination - światło odbite od innych obiektów. Ostateczny kolor jest sumą direct i indirect illumination. L( p, ω) = L ( p, ω) L ( p, ω) direct + Żeby wyliczyć kolor pokrytego lustrzanym materiałem punktu, musimy zsumować te dwa czynniki. Wyliczenie oświetlenia bezpośredniego przyjdzie nam łatwo - skorzystamy z kodu napisanego w poprzedniej części. Pytanie na dzisiaj brzmi - jak wyliczyć dla naszego materiału oświetlenie pośrednie? indirect 1
2 Można zauważyć że wektor odbitego światła L jest wektorem wchodzącego światła pośredniego I odbitym od normalnej powierzchni w tym punkcie - jako że znamy wektor odbitego światła (jest to wektor przeciwny do kierunku naszego promienia) i znamy normalną powierzchni, daje nam to prosty sposób na znalezienie wektora wchodzącego światła - postępujemy w odwrotny sposób i odbijamy wektor odbitego światła od normalnej. Do czego nam wektor wchodzącego światła? Możemy kontynuować robienie wszystkiego na opak, i śledzić wchodzący promień żeby zobaczyć z jakiego kierunku promień do nas przyszedł. A kiedy już wiemy skąd promień nadszedł... Możemy obliczyć jego jasność względem cieniowanego (lustrzanego) punktu w taki sam sposób jak obliczamy jego jasność względem kamery (obliczyć ile światła odbija w kierunku cieniowanego, pierwotnie punktu). Dzięki temu otrzymamy współczynnik pośredniego oświetlenia i skończymy z materiałem odbijającym światło. III. Zmiany Zanim zaczniemy kombinować z odbiciem, musimy zrobić coś jeszcze. Pamiętacie część mówiącą o cieniowaniu? Dodaliśmy tam między innymi taką pętlę (w klasie Raytracer): foreach (var light in world.lights) if (world.anyobstaclebetween(info.hitpoint, light.position)) continue; finalcolor += material.radiance(light, info); Jest to ładny, czytelny kod i dobrze oddaje nasze intencje. Niestety - czas się za wstydem przyznać - to było podwójne oszustwo: Założyliśmy że jeśli do jakiegoś punktu nie dochodzi światło bezpośrednio, ten punkt z pewnością jest zupełnie nieoświetlony (czarny) - w przypadku materiału lustrzanego to już nieprawda, ponieważ materiał może być oświetlony wyłącznie za pomocą światła odbitego. Założyliśmy że możemy obliczyć jasność punktu sumując wkład poszczególnych świateł - co jest nieprawdą, ponieważ czynniki takie jak odbicie liczymy tylko raz. Co więc z tym zrobimy? Niestety, wymienimy siekierkę na kijek, piękny kod na copy&paste. Każdy materiał będzie musiał osobiście zajmować się sprawdzaniem wszystkich świateł po kolei i sumowaniem ich wkładu. 2
3 Interfejs IMaterial będzie się musiał mocno zmienić: interface IMaterial ColorRgb Shade(Raytracer tracer, HitInfo hit); Jak widać, nie ma już parametru `light` (światło którego wkład liczymy), za to pojawił się `tracer` (o nim napiszemy później - na razie niech tam siedzi). Zmienią się w związku z tym klasy PerfectDiffuse i Phong - w obydwóch trzeba dodać pętlę foreach iterującą po światłach w świecie (przekazywanym wśród parametrów). Czyli poprzedni kod który można streścić mniej-więcej tak: ColorRgb result; /* obliczenia */ return result; Zmieni się na taki: ColorRgb totalcolor = ColorRgb.Black; foreach (var light in hit.world.lights) ColorRgb result; /* obliczenia */ totalcolor += result; return totalcolor; Dla kompletności, poniżej podany jest kompletny, zmieniony kod: klasa PerfectDiffuse: public ColorRgb Shade(Raytracer tracer, HitInfo hit) ColorRgb totalcolor = ColorRgb.Black; foreach (var light in hit.world.lights) Vector3 indirection = (light.position - hit.hitpoint).normalized; double diffusefactor = indirection.dot(hit.normal); if (diffusefactor < 0) continue; if (hit.world.anyobstaclebetween(hit.hitpoint, light.position)) continue; totalcolor += light.color * materialcolor * diffusefactor; return totalcolor; klasa Phong: public ColorRgb Shade(Raytracer tracer, HitInfo hit) ColorRgb totalcolor = ColorRgb.Black; foreach (var light in hit.world.lights) Vector3 indirection = (light.position - hit.hitpoint).normalized; double diffusefactor = indirection.dot(hit.normal); 3
4 if (diffusefactor < 0) continue; if (hit.world.anyobstaclebetween(hit.hitpoint, light.position)) continue; ColorRgb result = light.color * materialcolor * diffusefactor * diffusecoeff; double phongfactor = PhongFactor(inDirection, hit.normal, -hit.ray.direction); if (phongfactor!= 0) result += materialcolor * specular * phongfactor; totalcolor += result; return totalcolor; Skromnym zdaniem autora, nowa wersja jest dużo brzydsza od poprzedniej, ale będziemy się z tym musieli nauczyć żyć (reszta pisanego dzisiaj kodu będzie już schludniejsza). Jedyną zaletą dokonanych zmian jest to, że wspomniana pętla: foreach (var light in world.lights) if (world.anyobstaclebetween(info.hitpoint, light.position)) continue; finalcolor += material.radiance(light, info); return finalcolor; Zamienia się w proste return material.shade(this, info); III. Implementacja Pisanie materiału modelującego odbicie (nazwiemy go Reflective) zaczniemy jak zwykle od napisania szkieletu klasy: class Reflective : IMaterial Phong direct; // do bezpośredniego oświetlenia double reflectivity; ColorRgb reflectioncolor; public Reflective(ColorRgb materialcolor, double diffuse, double specular, double exponent, double reflectivity) this.direct = new Phong(materialColor, diffuse, specular, exponent); this.reflectivity = reflectivity; this.reflectioncolor = materialcolor; public ColorRgb Shade(Raytracer tracer, HitInfo hit) throw new System.NotImplementedException(); Jak zwykle - kolejny materiał, więcej parametrów w konstruktorze. MaterialColor to podstawowy kolor materiału i nie wymaga raczej żadnych wyjaśnień. Diffuse, specular i exponent są już znane - oznaczają odpowiednio jaka część światła jest przez obiekt rozpraszana, jak silne są specular highlights, oraz jaki wykładnik jest użyty do ich modelowania. Reflectivity oznacza jak mocno materiał odbija światło - przy wartości 0 nie ma żadnych odbić i materiał Reflective 4
5 jest identyczny do Phonga. Przy wartości 1 (i diffuse równym 0) materiał jest idealnym lustrem i odbija całe padające na niego światło. Współczynniki diffuse i reflectivity powinny zawsze się sumować maksymalnie do 1 - ponieważ część światła jest przez obiekt rozpraszana, część doskonale odbijana, ale nigdy więcej światła nie opuści obiekt niż na niego pada. Nie jest to wymuszone w kodzie, ale lepiej o tym pamiętać - w przeciwnym wypadku wyrenderowane sceny mogą wyjść nienaturalnie jasne. Dzięki polu `direct` całe obliczenia dla światła bezpośredniego wykonamy jedną linijką: ColorRgb radiance = direct.radiance(light, hit); Oświetlenie bezpośrednie załatwione. I co dalej? Do wyliczenia odbicia, potrzebujemy informacji skąd wpada odbijane światło. Możemy się tego dowiedzieć, jak było wspominane, odbijając wektor światła odbitego (liczymy światło odbijające się w kierunku kamery, więc bierzemy odwrotność kierunku promienia który idzie od kamery) od normalnej: Vector3 tocameradirection = -hit.ray.direction; Vector3 reflectiondirection = Vector3.Reflect(toCameraDirection, hit.normal); Ray reflectedray = new Ray(hit.HitPoint, reflectiondirection); Znając kierunek (reflectiondirection) z którego przychodzi odbijane światło, możemy stworzyć promień (reflectedray) w tamtym kierunku i `śledzić` go. tracer.shaderay(hit.world, reflectedray); Ale musimy wziąć pod uwagę to, że promień może teoretycznie odbijać się w nieskończoność od powierzchni (na przykład wewnątrz lustrzanej sfery) - dlatego musimy ograniczyć ilość odbić do jakiejś, ustalonej z góry wartości. Trzeba w jakiś sposób śledzić informację o poziomie rekurencji w jakim się znajdujemy podczas cieniowania punktu. Do przechowywania takich informacji przystosowana jest klasa HitInfo, dlatego dorzucimy jej jeszcze jedno pole: /// <summary>zwiększana przy śledzeniu odbitego lub załamanego promienia</summary> public int Depth get; set; Zmodyfikujemy lekko funkcję Raytracer.ShadeRay żeby brała pod uwagę możliwość zapędzenia się w rekurencji: public ColorRgb ShadeRay(World world, Ray ray, int currentdepth) if (currentdepth > maxdepth) return ColorRgb.Black; 5
6 HitInfo info = world.traceray(ray); info.depth = currentdepth + 1; if (info.hitobject == null) return world.backgroundcolor; IMaterial material = info.hitobject.material; return material.shade(this, info); Zmienna `maxdepth` nie weźmie się znikąd niestety, więc musimy ją zadeklarować i przypisać wartość w konstruktorze: class Raytracer int maxdepth; public Raytracer(int maxdepth) this.maxdepth = maxdepth;... W metodzie Main, zmieniamy tworzenie tracera na: Raytracer tracer = new Raytracer(5); W samym tracerze, usunęliśmy wersję metody ShadeRay nie pobierającą parametru currentdepth (zapomnienie o dodaniu tego parametru mogłoby mieć fatalne skutki), więc musimy zmienić linijkę kodu w funkcji Raytrace: bmp.setpixel(x, y, StripColor(ShadeRay(world, ray, 0))); Teraz możemy w końcu prześledzić odbity promień pisząc: tracer.shaderay(hit.world, reflectedray, hit.depth); Co jeszcze może wpływać na jasność odbitego światła? Może czynnik lamberta? Otóż okazuje się że nie, nie w tym przypadku: 6
7 Przekrój przez strumień promieni wchodzących jest równy przekrojowi promieni odbitych - oznacza to że gęstość strumienia promieni odbitych nie zależy od kąta padania. Teraz możemy w końcu wyliczyć odbite światło: ColorRgb reflected = tracer.shaderay(hit.world, reflectedray, hit.depth) * reflectioncolor * reflectivity; I połączyć wszystko w całość: public ColorRgb Shade(Raytracer tracer, HitInfo hit) Vector3 tocameradirection = -hit.ray.direction; ColorRgb radiance = direct.shade(tracer, hit); Vector3 reflectiondirection = Vector3.Reflect(toCameraDirection, hit.normal); Ray reflectedray = new Ray(hit.HitPoint, reflectiondirection); radiance += tracer.shaderay(hit.world, reflectedray, hit.depth) * reflectioncolor * reflectivity; return radiance; Pomijając zmiany wprowadzone w innych klasach, kodu wykonującego odbicie jak widać nie jest dużo. IV. Wyniki Wszystkie przykładowe sceny wyrenderowane oczywiście za pomocą tylko i wyłącznie dotychczas napisanego kodu. Nareszcie mamy coś czym można się ewentualnie komuś pochwalić: Przy odrobinie wyobraźni można bez problemu stworzyć robiące wrażenie, niemożliwe w prawdziwym świecie sceny (czy kiedykolwiek zastanawiałeś się co się stanie jeśli ustawisz dwa lustra naprzeciwko siebie?). A jeśli ustawimy kilka kul, oświetlimy je i przykryjemy odbijającą światło sferą? 7
8 Ciekawostka - jeśli połączymy cztery kule krawędziami i dodamy odpowiednie świato, otrzymamy pewien znany fraktal: I na sam koniec - jak prezentuje się nasza ulubiona scena? 8
9 Zmodyfikujmy materiały obiektów na scenie: IMaterial redmat = new Reflective(Color.LightCoral, 0.4, 1, 300, 0.6); IMaterial greenmat = new Reflective(Color.LightGreen, 0.4, 1, 300, 0.6); IMaterial bluemat = new Reflective(Color.LightBlue, 0.4, 1, 300, 0.6); IMaterial graymat = new Reflective(Color.Gray, 0.4, 1, 300, 0.6); A oto efekt: Całkiem nieźle w porównaniu z poprzednią wersją... Niestety - tak jak groziłem - następna część będzie nudniejsza i nie przyniesie tak rzucających się w oczy rezultatów - ale bez niej wiele byśmy stracili... 9
Raytracing: krok po kroku cz soft shading
Raytracing: krok po kroku cz. 10 - soft shading I. Co/Dlaczego? Kolejnym elementem który na naszych obrazach jest zawsze nierealistycznie ostry są cienie (ang. hard shadows). Dzieje się tak dlatego że
Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38
Wykład 5 Potok Renderowania Oświetlenie mgr inż. 1/38 Podejście śledzenia promieni (ang. ray tracing) stosuje się w grafice realistycznej. Śledzone są promienie przechodzące przez piksele obrazu wynikowego
Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania.
Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania. Chcąc osiągnąć realizm renderowanego obrazu, należy rozwiązać problem świetlenia. Barwy, faktury i inne właściwości przedmiotów postrzegamy
GRK 4. dr Wojciech Palubicki
GRK 4 dr Wojciech Palubicki Uproszczony Potok Graficzny (Rendering) Model Matrix View Matrix Projection Matrix Viewport Transform Object Space World Space View Space Clip Space Screen Space Projection
Raytracing: krok po kroku cz. 6 - model Phonga
Raytracig: krok po kroku cz. 6 - model Phoga I. Co/Dlaczego? Model oświetleia Phoga, którym będziemy się zajmować w tej części, został przedstawioy przez Phog Bui- Tuoga w jego rozprawie doktorskiej w
Oświetlenie obiektów 3D
Synteza i obróbka obrazu Oświetlenie obiektów 3D Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych Rasteryzacja Spłaszczony po rzutowaniu obraz siatek wielokątowych
Oświetlenie w OpenGL. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 8. Światło otaczajace. Światło rozproszone.
Oświetlenie w OpenGL Oprogramowanie i wykorzystanie stacji roboczych Wykład 8 Dr inż. Tomasz Olas olas@icis.pcz.pl W OpenGL źródło światła w scenie składa się z trzech składowych oświetlenia: otoczenia,
Grafika komputerowa. Model oświetlenia. emisja światła przez źródła światła. interakcja światła z powierzchnią. absorbcja światła przez sensor
Model oświetlenia emisja światła przez źródła światła interakcja światła z powierzchnią absorbcja światła przez sensor Radiancja radiancja miara światła wychodzącego z powierzchni w danym kącie bryłowym
Programowanie strukturalne i obiektowe. Funkcje
Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy
Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest
Pętle Pętla to pewien fragment kodu, który jest wykonywany wielokrotnie. Wyobraź sobie taką sytuację. Piszesz program do szyfrowania danych. Dane są szyfrowane kolejno bajt po bajcie. Załóżmy, że plik
Czym są właściwości. Poprawne projektowanie klas
Z akcesorów get i set korzysta każdy kto programuje w C#. Stanowią one duże udogodnienie w programowaniu obiektowym. Zapewniają wygodę, bezpieczeństwo i znacząco skracają kod. Akcesory są ściśle związane
Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.
Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na
OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska
OpenGL oświetlenie Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2017 Bogdan Kreczmer Niniejszy dokument zawiera
Pętle. Dodał Administrator niedziela, 14 marzec :27
Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać
Model oświetlenia. Radosław Mantiuk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie
Model oświetlenia Radosław Mantiuk Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Obliczenie koloru powierzchni (ang. Lighting) Światło biegnie od źródła światła, odbija
Animowana grafika 3D. Opracowanie: J. Kęsik.
Animowana grafika 3D Opracowanie: J. Kęsik kesik@cs.pollub.pl Powierzchnia obiektu 3D jest renderowana jako czarna jeżeli nie jest oświetlana żadnym światłem (wyjątkiem są obiekty samoświecące) Oświetlenie
Lekcja : Tablice + pętle
Lekcja : Tablice + pętle Wprowadzenie Oczywiście wiesz już jak dużo można osiągnąć za pomocą tablic oraz jak dużo można osiągnąć za pomocą pętli, jednak tak naprawdę prawdziwe możliwości daje połączenie
Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.
Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody
OpenGL : Oświetlenie. mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski. Szczecin, r 1/23
OpenGL : mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski 1/23 Folder z plikami zewnętrznymi (resources) Po odpaleniu przykładowego projektu, nie uruchomi się on poprawnie. Powodem
WSTĘP DO GRAFIKI KOMPUTEROWEJ
WSTĘP DO GRAFIKI KOMPUTEROWEJ Miłosz Michalski Institute of Physics Nicolaus Copernicus University Październik 2015 1 / 15 Plan wykładu Światło, kolor, zmysł wzroku. Obraz: fotgrafia, grafika cyfrowa,
Informatyka I: Instrukcja 4.2
Informatyka I: Instrukcja 4.2 1 Wskaźniki i referencje - bezboleśnie Nauczyliśmy się do tej pory, że funkcje w języku C mogą zwracać wartość. Co jednak, gdybyśmy chcieli napisać funkcję, która rozwiąże
GRAKO: ŚWIATŁO I CIENIE. Modele barw. Trochę fizyki percepcji światła. OŚWIETLENIE: elementy istotne w projektowaniu
GRAKO: ŚWIATŁO I CIENIE Metody oświetlania Metody cieniowania Przykłady OŚWIETLENIE: elementy istotne w projektowaniu Rozumienie fizyki światła w realnym świecie Rozumienie procesu percepcji światła Opracowanie
TEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Celem tego projektu jest stworzenie
Prosty kalkulator Celem tego projektu jest stworzenie prostego kalkulatora, w którym użytkownik będzie podawał dwie liczby oraz działanie, które chce wykonać. Aplikacja będzie zwracała wynik tej operacji.
Zjawisko widzenia obrazów
Zjawisko widzenia obrazów emisja światła przez źródła światła interakcja światła z powierzchnią absorbcja światła przez sensor Źródła światła światło energia elektromagnetyczna podróżująca w przestrzeni
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami
Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność
8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.
8. Wektory Przykłady 8.1. Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. Uwaga! Kod poniżej. To zadanie można rozwiązać przy użyciu wiedzy
Rekurencja (rekursja)
Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)
Grafika 3D program POV-Ray - 1 -
Temat 1: Ogólne informacje o programie POV-Ray. Interfejs programu. Ustawienie kamery i świateł. Podstawowe obiekty 3D, ich położenie, kolory i tekstura oraz przezroczystość. Skrót POV-Ray to rozwinięcie
Systemy wirtualnej rzeczywistości. Komponenty i serwisy
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Systemy wirtualnej rzeczywistości Laboratorium Komponenty i serwisy Wstęp: W trzeciej części przedstawione zostaną podstawowe techniki
Klasy i obiekty cz II
Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Klasy i obiekty cz II Hermetyzacja, mutatory, akcesory, ArrayList Rozwijamy aplikację Chcemy, aby obiekty klasy
Informatyka II. Laboratorium Aplikacja okienkowa
Informatyka II Laboratorium Aplikacja okienkowa Założenia Program będzie obliczał obwód oraz pole trójkąta na podstawie podanych zmiennych. Użytkownik będzie poproszony o podanie długości boków trójkąta.
Julia 4D - raytracing
i przykładowa implementacja w asemblerze Politechnika Śląska Instytut Informatyki 27 sierpnia 2009 A teraz... 1 Fraktale Julia Przykłady Wstęp teoretyczny Rendering za pomocą śledzenia promieni 2 Implementacja
6. Pętle while. Przykłady
6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!
Badanie przy użyciu stolika optycznego lub ławy optycznej praw odbicia i załamania światła. Wyznaczanie ogniskowej soczewki metodą Bessela.
Badanie przy użyciu stolika optycznego lub ławy optycznej praw odbicia i załamania światła. Wyznaczanie ogniskowej soczewki metodą Bessela. I LO im. Stefana Żeromskiego w Lęborku 20 luty 2012 Stolik optyczny
C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
Programowanie - wykład 4
Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include
C++ Przeładowanie operatorów i wzorce w klasach
C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje
programowanie w oparciu o platformę netbeans w praktyce
programowanie w oparciu o platformę netbeans w praktyce Adam Kędziora. Netbeans innovators grants. Mechanizm lookup jako panorama firm. Węzły w netbeans. Mechanizm lookup jako torba z narzędziami. Dwa
Następnie przypominamy (dla części studentów wprowadzamy) podstawowe pojęcia opisujące funkcje na poziomie rysunków i objaśnień.
Zadanie Należy zacząć od sprawdzenia, co studenci pamiętają ze szkoły średniej na temat funkcji jednej zmiennej. Na początek można narysować kilka krzywych na tle układu współrzędnych (funkcja gładka,
Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.
Nazwa implementacji: Nauka języka Python wyrażenia warunkowe Autor: Piotr Fiorek Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nasz kalkulator umie już liczyć, ale potrafi przeprowadzać
Rozdział 4 KLASY, OBIEKTY, METODY
Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej
Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:
Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie
Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych
Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych Artykuł przeznaczony jest dla osób związanych z testowaniem, programowaniem, jakością oraz wytwarzaniem oprogramowania, wymaga jednak
Zaawansowana Grafika Komputerowa
Zaawansowana Komputerowa Michał Chwesiuk Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Wydział Informatyki 28 Luty 2017 Michał Chwesiuk Zaawansowana Komputerowa 28 Luty 2017 1/11 O mnie inż.
Podstawy Programowania Podstawowa składnia języka C++
Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include
Grafika 3D program POV-Ray - 36 -
Temat 7: Rodzaje oświetlenia. Rzucanie cieni przez obiekty. Sposób rozchodzenia się, odbijania i przyjmowania światła na obiekcie. Ważną umiejętnością przy ray-tracingu jest opanowanie oświetlenia. Tym
Światła i rodzaje świateł. Dorota Smorawa
Światła i rodzaje świateł Dorota Smorawa Rodzaje świateł Biblioteka OpenGL posiada trzy podstawowe rodzaje świateł: światło otoczenia, światło rozproszone oraz światło odbite. Dodając oświetlenie na scenie
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą
Grafika Komputerowa. Metoda śledzenia promieni
Grafika Komputerowa. Metoda śledzenia promieni Aleksander Denisiuk Polsko-Japońska Akademia Technik Komputerowych Wydział Informatyki w Gdańsku ul. Brzegi 55 80-045 Gdańsk Ò Ù Ô º ÙºÔÐ 1 / 30 Metoda śledzenia
Programowanie obiektowe
Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;
Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np
Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami
6 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 6 1/7 Grafika Komputerowa 3D Instrukcja laboratoryjna Temat: Materiały i oświetlenie 6 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie Specyfikacja biblioteki OpenGL rozróżnia trzy
Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady
Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy
Przykładowe zadanie z unikania blokad.
Przykładowe zadanie z unikania blokad. Mamy system operacyjny, a w nim cztery procesy (,,,) i dwa zasoby (,), przy czym dysponujemy trzema egzemplarzami zasobu i trzema egzemplarzami zasobu. Oto zapotrzebowanie
Synteza i obróbka obrazu. Algorytmy oświetlenia globalnego
Synteza i obróbka obrazu Algorytmy oświetlenia globalnego Algorytmy oświetlenia Algorytmy oświetlenia bezpośredniego (direct illumination) tylko światło poadające bezpośrednio na obiekty, mniejszy realizm,
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Weźmy wyrażenie. Pochodna tej funkcji wyniesie:. Teraz spróbujmy wrócić.
Po co nam całki? Autor Dariusz Kulma Całka, co to takiego? Nie jest łatwo w kilku słowach zdefiniować całkę. Najprościej można powiedzieć, że jest to pojęcie odwrotne do liczenia pochodnych, Mówimy czasami
Lab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl
System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy
Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
PDF stworzony przez wersję demonstracyjną pdffactory
gdzie: vi prędkość fali w ośrodku i, n1- współczynnik załamania światła ośrodka 1, n2- współczynnik załamania światła ośrodka 2. Załamanie (połączone z częściowym odbiciem) promienia światła na płaskiej
Wyszukiwanie binarne
Wyszukiwanie binarne Wyszukiwanie binarne to technika pozwalająca na przeszukanie jakiegoś posortowanego zbioru danych w czasie logarytmicznie zależnym od jego wielkości (co to dokładnie znaczy dowiecie
Leszek Stasiak Zastosowanie technologii LINQ w
Leszek Stasiak Zastosowanie technologii LINQ w C# 1. Wstęp - połączenie Do naszych zadań będziemy używać Microsoft Visual Studio 2010. Stwórzmy nowy projekt Windows Form Application. Mając do dyspozycji
Wyznaczanie stałej słonecznej i mocy promieniowania Słońca
Wyznaczanie stałej słonecznej i mocy promieniowania Słońca Jak poznać Wszechświat, jeśli nie mamy bezpośredniego dostępu do każdej jego części? Ta trudność jest codziennością dla astronomii. Obiekty astronomiczne
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Problem: Jak zaimplementować stos? Co się stanie gdy dodamy do stosu obiekt typu Czlowiek? Co się stanie, gdy spróbujemy ten obiekt odczytać
Raytracing: krok po kroku
Raytracing: krok po kroku cz. 8- sampling i antyaliasing I. Co/Dlaczego? W tej części zajmiemy się głównie omawianiem samplingu - czyli generowania losowych punktów, tzw. sampli (określanych również jako
Podstawy programowania obiektowego
Podstaw programowania obiektowego wkład 5 klas i obiekt namespace ConsoleApplication1 // współrzędne punktu int, ; Jak, korzstając z dotchczasowej wiedz, zdefiniować w programie punkt? = 3; = 2; Może tak?
Aplikacje w środowisku Java
Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - wprowadzenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Klasa zbiór pól i metod Obiekt
Programowanie w Baltie klasa VII
Programowanie w Baltie klasa VII Zadania z podręcznika strona 127 i 128 Zadanie 1/127 Zadanie 2/127 Zadanie 3/127 Zadanie 4/127 Zadanie 5/127 Zadanie 6/127 Ten sposób pisania programu nie ma sensu!!!.
7. Pętle for. Przykłady
. Pętle for Przykłady.1. Bez użycia pętli while ani rekurencji, napisz program, który wypisze na ekran kolejne liczby naturalne od 0 do pewnego danego n. 5 int n; 6 cin >> n; 8 for (int i = 0; i
Gry komputerowe, Informatyka N1, III Rok
Oświetlenie Potok renderowania. Techniki oświetlenia i cieniowania. http://bazyluk.net/dydaktyka Gry komputerowe, Informatyka N1, III Rok POTOK RENDEROWANIA W grafice realistycznej stosuje się zwykle podejścia
Bartosz Bazyluk POTOK RENDEROWANIA Etapy renderowania w grafice czasu rzeczywistego. Grafika Komputerowa, Informatyka, I Rok
POTOK RENDEROWANIA Etapy renderowania w grafice czasu rzeczywistego. http://bazyluk.net/zpsb Grafika Komputerowa, Informatyka, I Rok POTOK RENDEROWANIA W grafice realistycznej stosuje się zwykle podejścia
WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy
WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy Pojęcie klasy Program napisany w języku Java składa się ze zbioru klas. Każda klasa zawiera
2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).
2. Zmienne i stałe Przykłady 2.1. Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117). 5 int a = 281; int b = 117; 7 8 cout
MODELE OŚWIETLENIA. Mateusz Moczadło
MODELE OŚWIETLENIA Mateusz Moczadło Wstęp Istotne znaczenie w modelu oświetlenia odgrywa dobór źródeł światła uwzględnianych przy wyznaczaniu obserwowanej barwy obiektu. Lokalne modele oświetlenia wykorzystują
Materiały. Dorota Smorawa
Materiały Dorota Smorawa Materiały Materiały, podobnie jak światła, opisywane są za pomocą trzech składowych. Opisują zdolności refleksyjno-emisyjne danej powierzchni. Do tworzenia materiału służy funkcja:
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Wykład 5: Klasy cz. 3
Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu
Raytracer. Seminaria. Hotline. początkujący zaawansowani na miejscu
Seminaria początkujący zaawansowani na miejscu Hotline wsparcie techniczne +420 571 894 330 zdalne sterowanie przez Team Viewer email carat@technodat.cz Zespół Spis treści Spis treści... - 2 - Informacja...
Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.
ZAMIANA LICZB MIĘDZY SYSTEMAMI DWÓJKOWYM I DZIESIĘTNYM Aby zamienić liczbę z systemu dwójkowego (binarnego) na dziesiętny (decymalny) należy najpierw przypomnieć sobie jak są tworzone liczby w ww systemach
Programowanie obiektowe
Wykład 2 28 lutego 2019 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Język C Krótka
Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.
Nazwa implementacji: Nauka języka C wyrażenia warunkowe if- Autor: Piotr Fiorek Opis implementacji: Poznanie struktury oraz zastosowania wyrażeń warunkowych if- w języku C. W programie realizującym jakiś
Podłączanie bibliotek Zapis danych do pliku graficznego Generowanie promienia pierwotnego Import sceny z pliku Algorytm ray tracingu
Ray Tracer cz.1 Michał Chwesiuk Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Wydział Informatyki 4 Kwiecień 2017 Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 1/21 Plan zajęć laboratoryjnych
Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach
Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach Tablice Powiedzmy, że chcemy zapamiętać w programie
PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec
PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych
Programowanie obiektowe i zdarzeniowe
Programowanie obiektowe i zdarzeniowe wkład 2 klas i obiekt namespace ConsoleApplication1 // współrzędne punktu int, ; Jak zdefiniować w programie punkt? = 3; = 2; Może tak? // wpisanie informacji Console.WriteLine("
Aleksandra Zając. Raport. Blender. Pokemon: Eevee
Aleksandra Zając Raport Blender Pokemon: Eevee 1. Modelowanie Przed rozpoczęciem modelowania do Blendera załadowałam obraz przedstawiający wybranego pokemona, aby podczas modelowania jak najlepiej odwzorować
REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał
REKURENCJA W JĘZYKU HASKELL Autor: Walczak Michał CZYM JEST REKURENCJA? Rekurencja zwana rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje.
Wykład 17: Optyka falowa cz.2.
Wykład 17: Optyka falowa cz.2. Dr inż. Zbigniew Szklarski Katedra Elektroniki, paw. C-1, pok.321 szkla@agh.edu.pl http://layer.uci.agh.edu.pl/z.szklarski/ 1 Interferencja w cienkich warstwach Załamanie
Dlaczego make-up jest niezbędny do zdjęć? Wiemy, jak tego uniknąć. Nasz specjalista od makijażu przygotuje Cię do zdjęć.
Dlaczego make-up jest niezbędny do zdjęć? Make-up biznesowy to ważna część każdej sesji fotograficznej. Na pewno wiesz, że makijaż biznesowy musi być stonowany, tak by żaden jego element nie odwracał uwagi
Grafika realistyczna. Oświetlenie globalne ang. global illumination. Radosław Mantiuk
Oświetlenie globalne ang. global illumination Radosław Mantiuk Generowanie obrazów z uwzględnieniem oświetlenia globalnego Cel oświetlenia globalnego obliczenie drogi promieni światła od źródeł światła
Część XV C++ Ćwiczenie 1
Część XV C++ Instrukcja break przerywa działanie tylko tej pętli, w ciele której została wywołana. Jeśli więc wywołamy break w pętli zagnieżdżonej w innej pętli, zostanie przerwane działanie tylko tej
Algorytmy oświetlenia globalnego
Synteza i obróbka obrazu Algorytmy oświetlenia globalnego Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych Algorytmy oświetlenia Algorytmy oświetlenia bezpośredniego
Programowanie Obiektowe Ćwiczenie 4
Programowanie Obiektowe Ćwiczenie 4 1. Zakres ćwiczenia wyjątki kompozycja 2. Zagadnienia Założeniem, od którego nie należy odbiegać, jest by każdy napotkany problem (np. zatrzymanie wykonywanej metody)
Klimat na planetach. Szkoła Podstawowa Klasy VII-VIII Gimnazjum Klasa III Doświadczenie konkursowe 2
Szkoła Podstawowa Klasy VII-VIII Gimnazjum Klasa III Doświadczenie konkursowe Rok 019 1. Wstęp teoretyczny Podstawowym źródłem ciepła na powierzchni planet Układu Słonecznego, w tym Ziemi, jest dochodzące
Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.
Dziedziczenie Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasy Student oraz Pracownik: class Student class Pracownik
Zasada Fermata mówi o tym, że promień światła porusza się po drodze najmniejszego czasu.
Pokazy 1. 2. 3. 4. Odbicie i załamanie światła laser, tarcza Kolbego. Ognisko w zwierciadle parabolicznym: dwa metalowe zwierciadła paraboliczne, miernik temperatury, żarówka 250 W. Obrazy w zwierciadłach:
Przekształcanie wykresów.
Sławomir Jemielity Przekształcanie wykresów. Pokażemy tu, jak zmiana we wzorze funkcji wpływa na wygląd jej wykresu. A. Mamy wykres funkcji f(). Jak będzie wyglądał wykres f ( ) + a, a stała? ( ) f ( )