Calisto v hr. Kami Chojnacka. Kurs grafiki 3D



Podobne dokumenty
Grafika 3D program POV-Ray - 1 -

rgbf<składowa_r,składowa_g,składowa_b,filter>. Dla parametru filter przyjmij kolejno wartości: 0.60, 0.70, 0.80, 0.90, 1.00, np.:

Zajęcia z grafiki komputerowej Pov Ray część 2

Grafika 3D program POV-Ray

Graficzne modelowanie scen 3D. Wykład. Pov-Ray

Ćwiczenie 6 Animacja trójwymiarowa

Gimp - poznaj jego możliwości!

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Rysunek 1: Okno timeline wykorzystywane do tworzenia animacji.

5.4. Tworzymy formularze

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

Tektura obiektów. Ogólnie sekcja opisująca teksturę wygląda następująco:

Przetwarzanie grafiki rastrowej na wektorową

Techniki wizualizacji. Ćwiczenie 10. System POV-ray tworzenie animacji

Techniki wizualizacji. Ćwiczenie 9. System POV-ray - wprowadzenie

Przy dużej wielkości głębokości uzyskamy wrażenie nieskończoności: Dla głębokości zerowej uzyskamy tekst płaski:

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D

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:

Podstawy POV-Ray a. Diana Domańska. Uniwersytet Śląski

6.4. Efekty specjalne

Główne elementy zestawu komputerowego

Komputery I (2) Panel sterowania:

Zajęcia nr 15 JavaScript wprowadzenie do JavaScript

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Ćwiczenie 3. I. Wymiarowanie

Formatowanie komórek

Skalowanie i ustawianie arkuszy/układów wydruku w AutoCAD autor: M. Motylewicz, 2012

GRAFIKA INŻYNIERSKA POLITECHNIKA ŚLĄSKA WYDZIAŁ ELEKTRYCZNY KATEDRA MECHATRONIKI. Instrukcja do ćwiczenia laboratoryjnego.

c. Przesuwamy sześcian wzdłuż osi Z o wartość 5

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Kolejną czynnością będzie wyświetlenie dwóch pasków narzędzi, które służą do obsługi układów współrzędnych, o nazwach LUW i LUW II.

Spora część kodu programu jest dla nas nieprzydatna. Dokonaj zmian tak, aby kod miał postać:

Wstęp do GIMP wycinanie obiektu z obrazka, projekt napisu. Rozpoczynamy prace w GIMP-e

Jak posługiwać się edytorem treści

Pokażę w jaki sposób można zrobić prostą grafikę programem GIMP. 1. Uruchom aplikację GIMP klikając w ikonę na pulpicie.

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

TABULATORY - DOKUMENTY BIUROWE

Grafika Komputerowa. Zajęcia X

Lekcja : Tablice + pętle

Ćwiczenie 1 Automatyczna animacja ruchu

Lekcja 5 - PROGRAMOWANIE NOWICJUSZ

Cykl lekcji informatyki w klasie IV szkoły podstawowej. Wstęp

po uruchomieniu instalator pyta o język. My potwierdzamy, że ma być polski (czyli dalej) teraz jest okno <Witamy w kreatorze> klikamy <dalej>

Definiowanie układu - czyli lekcja 1.

True Space 3.2 KURS PODSTAWOWY. program można ściągn ąć za darmo ze strony Co to właściwie jest?

Ćwiczenie 25 Działania matematyczne we Flashu

Simba 3D LOGO. Cele zajęć: - Poznanie zasad i sposobów tworzenia procedur z parametrami. - Poznanie zasad wywoływania procedur z parametrami.

Symulator tabletu z systemem Windows 8.

Narysujemy uszczelkę podobną do pokazanej na poniższym rysunku. Rys. 1

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

Obsługa programu Paint materiały szkoleniowe

Dzielenie sieci na podsieci

e-sprawdzian instrukcja programu do sprawdzania wiedzy ucznia przy pomocy komputera (WINDOWS & LINUX)

CorelDRAW. 1. Rysunek rastrowy a wektorowy. 2. Opis okna programu

Podstawy technologii WWW

NIEDŁUGI I NIETRUDNY PRZEWODNIK PO PROGRAMIE DLA UCZESTNIKÓW KONKURSU EKONOMICZNEGO EKONOMIKS

(1,10) (1,7) (5,5) (5,4) (2,1) (0,0) Grafika 3D program POV-Ray

Animacje z zastosowaniem suwaka i przycisku

Ćwiczenie pochodzi ze strony

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt

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.

Microsoft Small Basic

Podstawy POV-Ray a. Diana Domańska. Uniwersytet Śląski

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Makropolecenia w PowerPoint Spis treści

Pierwsze internetowe zapisy

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego

Rys. 1. Rozpoczynamy rysunek pojedynczej części

"Fotomontaż- proste i szybkie efekty"

Geometria. Hiperbola

Metaliczny button z deseniem.

Nagrywamy podcasty program Audacity

Celem ćwiczenia jest zapoznanie się z podstawowymi możliwościami języka Prolog w zakresie definiowania faktów i reguł oraz wykonywania zapytań.

Rozdział 4 KLASY, OBIEKTY, METODY

Przykładowe zadanie z unikania blokad.

Okno zarządzania warstwami w dokumencie znajduje się na wstążce Narzędzia główne

5.2. Pierwsze kroki z bazami danych

Rys.1. Technika zestawiania części za pomocą polecenia WSTAWIAJĄCE (insert)

6.4. Efekty specjalne

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

I. Potęgi. Logarytmy. Funkcja wykładnicza.

Animacja. Instrukcja wykonania animacji metodą klatek kluczowych. Autor: Bartosz Kowalczyk. Blender 2.61

Obsługa programu Paint. mgr Katarzyna Paliwoda

Odbicie na szkłach okularów

3. Macierze i Układy Równań Liniowych

O co chodzi z tym MATLAB'em?!

Operacje na Wielu Arkuszach

Krzysztof Sendor Słowa kluczowe Meble kuchenne w Intericad. Otwieramy moduł kuchenny korzystając z menu: Moduł kuchenny/pokaż Bibliotekę

Podstawowe komendy. Ćwiczenie 1

Jak zrobić klasyczny button na stronę www? (tutorial) w programie GIMP

Diagnostyka obrazowa

Tematy lekcji informatyki klasa 4a styczeń 2013

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

GIMP. Ćwiczenie nr 6 efekty i filtry. Instrukcja. dla Gimnazjum 36 - Ryszard Rogacz Strona 18

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Celem tego projektu jest stworzenie

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Praktyczne przykłady wykorzystania GeoGebry podczas lekcji na II etapie edukacyjnym.

Techniki Multimedialne

Tworzenie własnych map dla UI-View

Transkrypt:

Calisto v hr. Kami Chojnacka Kurs grafiki 3D Ministerstwo Dziedzictwa Narodowego Księstwa Sarmacji Grodzisk 2008

Witajcie! Ministerstwo Dziedzictwa Narodowego widząc zastój w rozwoju sztuki w Sarmacji postanowiło podać pomocną dłoń wszystkim, którzy pragną zgłębić tajniki grafiki komputerowej. W tym celu przygotowano zestawy specjalnych kursów dla wszystkich zainteresowanych tematem. Pierwszy kurs, złożony w kilkunastu wykładów będzie dotyczył grafiki trójwymiarowej (3D) jako tej, której przejawów w Sarmacji znaleźć można najmniej. Następne edycje najprawdopodobniej będą dotyczyły grafiki rastrowej oraz wektorowej. W kursie może wziąć udział każdy. W zależności od preferencji można zostać studentem albo wolnym słuchaczem kursu. Różnica jest jedna, za to zasadnicza. Od studentów wymagamy przesyłania na adres Ministerstwa prac zadanych na końcu każdego wykładu. Wolni słuchacze tego obowiązku nie mają. W nagrodę za przesłanie wszystkich prac Ministerstwo na koniec kursu przyzna studentom Certyfikat Grafika 3D. Mam nadzieję, że cały cykl kursów graficznych będzie cieszył się ogromnym powodzeniem. W razie jakichkolwiek uwag proszę pisać na adres winheart69@gmail.com lub numer Gadu Gadu: 2549451. Chętnie rozważę wszystkie propozycje i odpowiem na wszystkie pytania. Obsługa programu może się wydać problematyczna dla początkujących, jednakże ręczę, że wystarczy odrobina chęci i wszystko pójdzie jak po maśle. W razie potrzeby pomyślę na dodatkowymi zajęciami dla tych, którzy nie będą mogli sobie poradzić z prezentowanymi przeze mnie materiałami. ( ) Calisto v-hr. Kami-Chojnacka Minister Dziedzictwa Narodowego 2

Wykład 1: Wstęp do pracy z programem Pov-Ray Podczas dzisiejszych zajęć poznamy program graficzny, który umożliwi nam tworzenie trójwymiarowych obrazów. Program ten noszący nazwę Pov-Ray, można pobrać bezpłatnie na stronie www.pov-ray.org. Ważną informacją jest, że w Pov-Rayu nie rysuje się w dosłownym tego słowa znaczeniu. Tu, przy pomocy prostych poleceń tekstowych tworzymy scenę i dodajemy do niej różne obiekty. Dopiero gotowy obraz możemy uruchomić, a komputer przetworzy podane mu dane na konkretne kształty. Oczywiście takie rozwiązanie może odstraszać początkujących, niemniej kurs, który dla Was przygotowałam, będzie szczegółowy w takim stopniu, by każdy mógł poradzić sobie z tworzeniem własnych obiektów 3D. Największym atutem Pov-Raya jest zapewne możliwość tworzenia niezwykle realistycznych obrazów przy minimalnym wysiłku. Warto zatem poświęcić nieco czasu na naukę jego obsługi. Zaczynamy! Zanim po raz pierwszy uruchomimy Pov-Raya pozwolę sobie przypomnieć podstawowe fakty dotyczące obrazów w przestrzeni. Każdemu punktowi w przestrzeni możemy przypisać określoną współrzędną oznaczając jego rzuty prostopadłe na jedną z trzech osi. Dokładny opis tego przedstawia rysunek 1. Czarna kropka na środku obrazu, to punkt, który chcemy opisać za pomocą podania współrzędnych jego położenia. Widzimy, że nasz punkt ma trzy współrzędne: Xsową, Ykową i Zetową. Kolorowe odcinki przedstawiają nam wspomniane wcześniej rzuty prostopadłe na kolejne osie. Pierwszą współrzędną odczytujemy z osi X, drugą z osi Y natomiast trzecią z osi Z. Punk przedstawiony na rysunku ma więc współrzędne (3,5,6). W programie współrzędne zapisujemy w następujący sposób: <3,5,6>. Zapis taki oznacza, że jeśli przyjmiemy za środek naszej sceny punkt <0,0,0> to nasz punkt znajdzie się o 3 jednostki w prawo, 5 do góry i 6 w głąb od środka sceny. Wiemy już jak wyglądają współrzędne poszczególnych punktów zatem możemy po raz pierwszy uruchomić Pov-Raya. Powinno nam się pojawić okienko takie, jak na rysunku 2. 3

Przyjrzyjmy mu się dokładnie. Duże przyciski w górnej części okna będą Nas interesowały najbardziej. Pierwszy: New, służy jak nie trudno się domyślić do tworzenia nowego dokumentu. Dokument w ten sposób utworzony utworzy się Nam w nowej zakładce o nazwie Untitled. Nie ma w nim nic szczególnego, jest to po prostu czysta karta, którą będziemy później zapisywać kodem naszego obrazu. Kolejne przyciski: Open i Close, służą do otwierania i zamykania istniejących zakładek. Warto zwrócić na to uwagę, ponieważ Pov-Ray przy wyłączeniu krzyżykiem zostawia w pamięci wszystkie otwarte zakładki. Gdyby nie przycisk Coles, w krótkim czasie nie zaśmiecilibyśmy sobie całe okno. Ostatnim ważnym przyciskiem jest przycisk Run. Na zamieszczonym rysunku znajduje się on na samym końcu ciągu przycisków, w programie jest przedostatni. Dzięki niemu możliwe jest przetworzenie naszego kodu na obraz. Warto jeszcze wspomnieć o rozdzielczości. Nie wiele zdziałamy powiększając okno. Obraz pozostanie w takich samych, zadeklarowanych rozmiarach. Tajemnicza deklaracja znajduje się w małym prostokącie pod przyciskami New i Open. Na rysunku 2 rozdzielczość ustawiona jest na 640x480. Możecie poeksperymentować z rozdzielczością, warto jednak pamiętać o tym, że im większy obraz, tym dłużej będzie się on renderował. Kiedy już zapoznaliśmy się z najważniejszymi funkcjami obsługi Pov-Raya możemy przejść do tworzenia pierwszego obrazu. Algorytm tworzenia jest niezwykle prosty. Musimy pamiętać jedynie o kilku rzeczach. Przede wszystkim dodajemy biblioteki kolorów i tekstur. Robimy to wpisując do nowego dokumentu następujące komendy: #include "colors.inc" #include "textures.inc" Dzięki tym prostym komendom będziemy mogli tworzonym obiektom nadać kolor lub teksturę. Następnym krokiem jest ustawienie kamery. Robimy to przy pomocy polecenia camera {location <-2,4,7> look_at <0,4,0>} Jak widać funkcja kamery ma dwa parametry. Pierwszy: location, określa nam dokładnie punkt, w którym będzie umiejscowiona kamera, drugi zaś definiuje punkt, na który patrzymy. Plik, który w ten sposób stworzyliśmy możemy uruchomić wciskając przycisk Run. Po jego naciśnięciu pojawi nam się okienko z pytaniem o zapisanie zmian. Rozsądnym posunięciem jest zaznaczenie opcji: Automatically autosave files for the test of this session. Dzięki temu na resztę sesji będziemy mogli zapomnieć o zapisywaniu zmian, gdyż będą się one zapisywały automatycznie. Po zaznaczeniu tej opcji wciskamy przycisk Save, wybieramy lokację naszego pliku, powiedzmy, że na razie może to być Pulpit, a następnie wpisujemy nazwę tworzonego obrazu (w moim przypadku: kursik) i wciskamy Enter. Uruchomi nam się kolejne okienko, w którym wyrenderowany zostanie obraz, który stworzyliśmy. Nasz obraz jest cały czarny, nie ma się jednak czym przejmować, nie dodaliśmy bowiem do niego absolutnie nic. 4

Aby umożliwić oglądanie powstałego obrazu musimy scenę oświetlić. W tym celu posługujemy się następującym poleceniem: light_source{<0,3,5> White} Jak nie trudno zauważyć polecenie light_source ma dwa parametry: położenie źródła światła I jego kolor. Czasami, żeby ustalić dobre położenie źródła światła trzeba trochę poeksperymentować jednak na potrzeby naszego pierwszego spotkania wystarczy w zupełności ulokować je w punkcie, który podała w przykładzie. UWAGA! Wielkość liter ma znaczenie, dlatego nazwy kolorów piszemy z wielkiej litery! Uruchamiamy program po raz kolejny i zauważamy, że nadal nic się nie stało. O co zatem chodzi? Powód jest prosty. Mamy kamerę, mamy źródło światła, ale nie mamy żadnego obiektu, na który nasze światło mogłoby padać. Świeci ono po prostu w pustkę. Zajmijmy się zatem naszymi pierwszymi obiektami: kulą i prostopadłościanem. Nie trudno się domyślić, że parametrami określającymi kulę będą jej środek oraz promień. Powiedzmy więc, że chcemy stworzyć kulę o środku w punkcie o środku w punkcie <1,4,1> i o promieniu 1. Do tworzenia kuli korzystamy z polecenia: sphere przypisując mu parametry wspomniane wyżej. A oto i cała konstrukcja: sphere{<1,4,1> 1} Jeśli spróbowaliście wyrenderować obraz przy pomocy przycisku Run, na pewno zauważyliście, że nie wiele się zmieniło. Nadal mamy czarne tło i nic poza tym. Dzieje się tak ponieważ Pov- Ray domyślnie nadał naszej kuli kolor czarny. Aby to zmienić musimy nieco rozszerzyć polecenie tworzenia sfery. Mam na myśli oczywiście rozszerzenie o kolor. W bibliotece kolorów (colores.inc), którą dodaliśmy na samym początku naszego programu znajdziemy większość kolorów: biały (White), żółty (Yellow), pomarańczowy (Orange), złoty (Gold), różowy (Pink), czerwony (Red), fioletowy (Violet), niebieski (Blue), zielony (Green), szary (Gray), srebrny (Silver), czarny (Black). Jest to znaczne ułatwienie dla twórców grafiki 3D, choć oczywiście nie jest to rozwiązanie jedyne. Na późniejszych wykładach nauczymy się komponować swoje własne kolory, zanim jednak do tego dojdziemy, w zupełności wystarczą Nam te podane wyżej. Jak więc nadać naszej kuli kolor? To proste, wystarczy do polecenia sphere dodać jeszcze jeden parametr, tuż za definicją długości promienia. Gotowe polecenie ma postać: sphere{<1,4,1> 1 texture{pigment{color Silver}}} Gratuluję! Teraz możemy obejrzeć wynik dotychczasowej pracy! Tworzenie prostopadłościanu jest podobne. W jej realizacji pomaga funkcja box. Parametry jakie należy zadać tej funkcji, by działała poprawnie, przedstawione są na poniższym rysunku: 5

Oczywiście, prostopadłościanowi również musimy nadać kolor. Polecenie: box{<2,2,0> <0,3,2> texture{pigment{color Silver}}} Ciekawym eksperymentem dla wszystkich uczestników kursu może być zmienianie położenia kamery oraz punktu na który patrzymy. Można również dodać dodatkowe źródła światła uzyskując całkiem ciekawe efekty. Życzę udanej zabawy. Poniżej przedstawiam kod i wynik działania programu, który dziś napisaliśmy po dodaniu dodatkowych źródeł światła: 6

Zadania na zaliczenie: 1. Narysuj bałwana. Nie zapomnij o oczach i guzikach. 2. Stwórz figurę przedstawioną na rysunku poniżej i oświetl ją tak, by wyglądała jakby znajdowała się na sali, na której właśnie trwa dyskoteka. 7

Wykład 2: Upiększanie rysunku Zanim przejdziemy do dzisiejszego głównego tematu chciałabym jeszcze zapoznać Was z dwiema przydatnymi figurami, a mianowicie z walcem i stożkiem. Dla ułatwienia będziemy pracować na obrazie stworzonym ostatnio. W przypadku stożka musimy naszej funkcji podać aż cztery parametry: współrzędne środka podstawy, promień podstawy, współrzędne wierzchołka stożka oraz promień okręgu zamykającego stożek. Ostatni parametr przyjmie wartość niezerową tylko w przypadku, gdy będziemy chcieli wygenerować stożek ścięty. Na razie jednak zajmiemy się stożkiem zwykłym. Do jego utworzenia służy polecenie: cone. A oto cała funkcja wraz z parametrami. cone{<-1,2,1> 0.5 <-1,5,1> 0 texture{pigment{color Silver}}} Oczywiście zadane parametry zależą tylko od nas, możemy zmieniać promienie w przypadku obu okręgów oraz współrzędne punktów uzyskując dzięki temu efekt pochylenia (w przypadku zmiany pierwszej i trzeciej współrzędnej), ścięcia (w przypadku zmiany ostatniego parametru z 0 na liczbę dodatnią) oraz wydłużenia lub skrócenia (w przypadku zmian w drugiej współrzędnej. Zanim przejdziemy dalej przećwiczcie sobie zabawę ze stożkiem. Kolejną figurą, która przyda nam się niewątpliwie jest walec. Polecenie generujące go jest co do struktury bardzo podobne do polecenia generującego stożek. W czym więc tkwi różnica? Jak widać na załączonym powyżej obrazku podstawa walca, w przeciwieństwie do stożka nie ulega zmianie. Teoretycznie moglibyśmy stworzyć walec poleceniem generującym stożek, wpisując te same promienie w przypadku obu podstaw. Jest jednak funkcja, która nieco nam pomaga (nieco, bo różnic się jedynie tym, że ma trzy parametry zamiast czterech). Funkcja, o której mowa to: cylinder, a gotowe polecenie wygląda następująco: cylinder{<-2.5,2,1> <-2.5,5,1> 0.5 texture{pigment{color Silver}}} Potrafimy już zatem rysować podstawowe figury geometryczne. Przy ich pomocy będziemy tworzyć bardziej złożone obiekty. Zanim jednak do tego przejdziemy musimy poznać kilka istotnych funkcji pozwalających nam nieco uatrakcyjnić nasze obrazy. Zacznijmy od płaszczyzn. Jak do tej pory, tworzone przez nas obiekty były zawieszone w powietrzu. Oczywiście stan taki raczej sprzeczny jest z rzeczywistością. Na naszej planecie rzadko się zdarza by coś wisiało w powietrzu. Trzeba to na czymś postawić. Na stole, na trawie, na łóżku. Do wygenerowania płaszczyzny służy polecenie plane. Aby nasza płaszczyzna się pojawiła musimy określić jej położenie i oś, po której będziemy ją przesuwać. Najłatwiej będzie zademonstrować działanie tej funkcji na przykładzie. Dodajmy teraz do naszego obrazu płaszczyznę, powiedzmy drewnianą. plane{y,2 texture{cherry_wood}} 8

Powyższe polecenie wygeneruje nam płaszczyznę poziomą zaczynającą się na wysokości 2. Dzięki temu nasze przedmioty będą stały właśnie na niej. Zwróciliście na pewno uwagę na magiczne słowo, które znajduje się praktycznie w przypadku generowania praktycznie każdego obiektu. Chodzi oczywiście o polecenie texture. Do tej pory używaliśmy konstrukcji: texture{pigment{color Red}}. Takie polecenie pozwala nam nadać naszemu obiektowi konkretny kolor. W przypadku płaszczyzny, którą generowaliśmy powyżej składnia polecenia była jednak inna: texture{cherry_wood}. Podczas pierwszego wykładu, kiedy poznawaliśmy strukturę każdego obrazu wspomniałam nieco o bibliotekach, które musimy dodawać na początku każdego kodu. Mam na myśli biblioteki colors.inc i textures.inc. W pierwszej zdefiniowane są podstawowe kolory, w drugiej podstawowe tekstury. Naturalnie wszystko możemy stworzyć sobie sami od podstaw. Jest to jednak troszeczkę wyższy poziom wtajemniczenia. Zanim go osiągniemy będziemy posługiwali się jedynie gotowymi wzorami. Ja osobiście najczęściej używam tekstur: Jade, White_Marble i Brown_Agate. Sprawcie jakie daje to efekty. Więcej tekstur znajdziecie na stronie http://texlib.povray.org/. Tekstury pozwalają w prosty i szybki sposób podnieść wartość estetyczną naszego obrazu. Kolejnym przystankiem na naszej mapie jest tło. Domyślnie Pov-Ray dobiera nam tło koloru czarnego. Przez to nasz obraz jest taki ciemny. Możemy to jednak w prosty sposób zmienić. Każdy kto zna podstawy języka angielskiego bez problemu może się domyślić, że będzie służyło nam do tego polecenie background. Sprawmy zatem, by nasze tło zrobiło się białe: background{white} Różnicę widać od razu. Oczywiście białe tło niezbyt pasuje do naszego obrazu, ale dobranie koloru pozostawiam Wam, jako ćwiczenie. Potrafimy już dodawać płaszczyzny, nadawać przedmiotom kolor lub teksturę oraz zmieniać kolor tła. Podczas dzisiejszego wykładu chciałabym Wam powiedzieć jeszcze o specjalnej funkcji pozwalającej nieco upiększyć rzeczywistość naszego obrazu. Dodaje się ją jako parametr do funkcji naszego obiektu, zaraz po definicji koloru lub tekstury. Polecenie ma postać: finish{reflection 0.5 phong 0.5} Sami zobaczcie do czego służy. Ja pozwolę sobie jeszcze tylko wspomnieć, że wartości, które podajemy w tej funkcji: reflection i phong mogą przyjmować wartości tylko od 0 do 1. Poeksperymentujcie. Zasadniczo to wszystko na dziś. Mam nadzieję, że udało mi się to przedstawić w sposób klarowny i czytelny. Jednak na wszelki wypadek zamieszczam kod obrazu, który dziś wygenerowaliśmy: #include "colors.inc" #include "textures.inc" camera {location <0,4,7> look_at <0,4,0>} light_source{<0,3,5> White} light_source{<-2,3,5> Yellow} light_source{<2,3,5> Red} light_source{<3,0,5> Green} light_source{<0,7,5> Blue} plane{y,2 texture{cherry_wood}} background{white} 9

sphere{<1,4,1> 1 texture{pigment{color Silver}} finish{reflection 0.5 phong 0.5}} box{<2,2,0> <0,3,2> texture{pigment{color Silver}}} cone{<-1,2,1> 0.5 <-1,5,1> 0 texture{pigment{color Silver}}} cylinder{<-2.5,2,1> <-2.5,5,1> 0.5 texture{pigment{color Silver}}} Zadanie: Narysuj główkę pajacyka otoczoną bańkami mydlanymi (do tworzenia baniek możecie skorzystać z tekstury Glass - przy okazji jest to najlepsza tekstura do sprawdzania działania ostatniej podanej funkcji). 10

Wykład 3: Przekształcenia Poznaliśmy już całkiem sporo obiektów. Potrafimy tworzyć podstawowe figury geometryczne, więc teoretycznie potrafimy stworzyć każdy obiekt, budując go z nich. Nie trudno jednak zauważyć, że takie rozwiązanie byłoby niezmiernie uciążliwe. Podczas kolejnych wykładów poznamy szereg funkcji w znacznym stopniu ułatwiający nam zabawę. W dniu dzisiejszym chciałabym zapoznać Was z funkcjami umożliwiającymi przekształcanie naszego obrazu. Nauczymy się przesuwać obiekt, skalować go oraz obracać. Teoretycznie, funkcje te nie są nam do niczego potrzebne, gdyż każdy obiekt możemy stworzyć w taki sposób, by odpowiadał innemu obiektowi po przekształceniu. Jestem jednak pewna, że zauważycie jak bardzo te operacje ułatwiają pracę z programem Pov-Ray. Z wiadomości, które poznaliśmy do tej pory wynika jasno, że należy stworzyć 9 obiektów (walców), z których każdemu należy nadać odpowiednie parametry - położenie punktu, będącego środkiem podstawy dolnej oraz górnej, a także promień podstawy. O ile kwestia promienia nie przysporzy nawet najmniejszego kłopotu (wszystkie paliki mają być tej samej grubości) o tyle określanie położenie środków podstaw może już być irytujące - szczególnie, jeśli płotek zamiast 9 będzie miał mieć 90 palików. Twórcy programu pomyśleli i o tym. Umożliwiając nam stworzenie tego płotu z jednego obiektu, który następnie poddajemy pewnym przekształceniom. Ale zacznijmy od początku, tzn. od stworzenia nowego pliku. Myślę, że stworzenie sceny, na której będzie jedynie podstawa nie sprawi Wam najmniejszego problemu, dlatego pozostawiam to jako proste ćwiczenie. Kiedy mamy już scenę rysujemy na niej jeden walec. Wymiary zależą tylko od Waszej wyobraźni, pamiętajcie jednak, żeby dobrze ustawić kamerę i źródła światła. Aby ułatwić sobie tłumaczenie a Wam rozumienie skorzystam z przykładu: cylinder{<-1.1,-1.2,0> <-1.1,1.2,0> 0.2 texture{pigment{color Red}}} Mamy tu walec, którego punktem środka podstawy jest p=<-1.1,-1.2,0> a promieniem r=0.2. Aby z naszego walca powstał płotek musimy go odpowiednio poprzesuwać. Do przesuwania obiektów w programie Pov-Ray służy polecenie translate. Zanim jednak przejdziemy do jego zastosowania musimy sobie odpowiedzieć na pytanie: jak przesuwać nasz walec. Odpowie jest prosta: Chcemy by paliki przylegały do siebie, nie nachodząc jeden na drugi i nie zostawiając przerw, dlatego mu- 11

simy przesuwać pierwszy walec o wielokrotności 2r (dwóch promieni) sytuację obrazuje poniższy rysunek: Polecenie translate wpisuje się definicji danego obiektu. Aby powstał rysunek jak ten powyżej należy więc wpisać kod: cylinder{<-1.1,-1.2,0> <-1.1,1.2,0> 0.2 } cylinder{<-1.1,-1.2,0> <-1.1,1.2,0> 0.2 translate<0.4*1,0,0>} Zwróćcie uwagę na to, że w deklaracji wektora przesunięcia użyłam zapisu 0.4*1 zamiast po prostu napisać 0.4. Oczywiście obie formy są poprawne, a druga jest może nawet bardziej elegancka na tym etapie, jednak zapis zastosowany przeze mnie ułatwi Wam dokonywanie kolejnych przesunięć oraz uzmysłowi pewną regułę, której zastosowanie pokażę na wykładzie 5. Jak widzicie, kolejne sztachety tworzymy wpisując w miejsce 1 w deklaracji wektora 0.4*1, kolejno 2,3,.. aż do 8. Polecenie to znacznie ułatwia pracę, jednak wciąż nie jest doskonałe. Wymaga od nas przekopiowania polecenie cylinder tyle razy ile będzie nam potrzebnych sztachet. Sami chyba jednak przyznacie, że jest to zdecydowane ułatwienie. Spróbujmy teraz stworzyć coś na kształt choinki. Naturalnie możemy tego dokonać stosując tylko i wyłącznie przesunięcie względem osi Y stożka. Takie zastosowanie jest jednak mało doskonałe, a to ze względu na to, że prawdziwa choinka zwęża się wraz z wysokością, a poszczególne jej piętra mają różne promienie. My potrzebujemy stworzyć coś takiego, co przedstawia poniższy rysunek: Od razu widać, że poszczególne piętra różnią się od siebie wielkością. I znowu jak w przypadku naszego płotka moglibyśmy z powodzeniem za każdym razem deklarować rozmiary poszczególnych partii naszej choinki. I po raz kolejny byłoby to nużące. Zamiast bawić się w przypisy- 12

wanie poszczególnych parametrów wszystkim stożkom. Chcemy jednak zastosować prostsze rozwiązanie - w tym celu tworzymy jeden stożek a następnie odpowiednio go przekształcamy - przesuwamy w górę i skalujemy. Do skalowania służy polecenie scale. Składnie tego polecenie wygląda następująco: scale<0.7,0.7,0.7> przy czym w wypadku, w którym mamy do czynienia ze skalowaniem takim samym po wszystkich osiach możemy zastosować formę uproszczoną: scale 0.7 Polecenie scale wpisujemy w tym samym miejscu, w którym do tej pory wpisywaliśmy polecenie translate. Naszą choinkę generuje zatem kod: cone{<0,0,0> 1 <0,2,0> 0 texture{jade} } cone{<0,0,0> 1 <0,2,0> 0 texture{jade} translate<0,1.5,0> scale 0.7} cone{<0,0,0> 1 <0,2,0> 0 texture{jade} translate<0,4.9,0> scale 0.4} Wektor przesunięcia dobrałam sobie metodą prób i błędów, ale naturalnie bez większych problemów można go wyliczyć. Na obecnym poziomie jednak nie jest nam to potrzebne. Polecenie scale jest niezwykle przydatne. Proponuje je zapamiętać, na pewno jeszcze podczas tego kursu nie jeden raz nam się przyda. Potrafimy już przesuwać i skalować obiekty. Zostało nam jeszcze ich obracanie. Co do zasady jest ono równie proste jak pozostałe funkcje, jednakże czasami może się okazać, że obiekt obraca się niezgodnie z naszymi założeniami. Zacznijmy może od stworzenia takiego obrazu: Nietrudno zauważyć, że masz obiekt składa się z odpowiednio obróconych walców. Pytań jednak, jakie powinien sobie postawić projektant to jednak nie rozwiązuje. A pytania te to: względem której osi się obraca przedmiot oraz co my tak właściwie obracamy. W przypadku pierwszego pytania nie ma większych problemów, gdyż nawet jeśli ktoś nie zauważy, że obracamy walec względem osi Z, bez problemu może to sprawdzić przypisując po kolei odpowiednie wartości kąta obrotu. W drugim przypadku sprawa nie jest już tak oczywista. Czy obracamy walec względem jego początku, końca czy środka? A może istnieje jeszcze inna oś, o której nic nam nie wiadomo? Zasadniczo łatwo tu popełnić błąd. Mogłoby się nam bowiem wydawać, że dany obiekt obracamy względem jego środka. Tak jednak nie jest. Obracamy go względem prostej przechodzącej przez punkt (0,0,0). Trzeba mieć to na uwadze dokonując kolejnych obrotów. To tyle tytułem wstępu do obrotu. Przedmioty obracamy przy pomocy polecenie rotate. Jako parametry podajemy kąty obrotu względem poszczególnych osi. Aby stworzyć powyższy kwiatek musimy wykonać następujące polecenia: 13

cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}} rotate<0,0,30>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}rotate<0,0,60>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}rotate<0,0,90>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}rotate<0,0,120>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}rotate<0,0,150>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}rotate<0,0,180>} Aby jeszcze bardziej uzmysłowić Wam potęgę osi obrotu pokaże jaki wynik otrzymamy dla tego samego programu jeśli stworzymy walec o środkach podstawy w punktach <0,2,0> i <0,4,0>. Zasada jest zatem prosta: Najpierw pomyśl, potem obracaj. Na dziś to wszystko. Zapraszam za tydzień. Zadanie: Stwórz obraz przedstawiający płot ogrodzony otoczony choinkami. Zza płotu powinny wyglądać kwiaty. 14

Wykład 4: Operacje boolowskie Podczas dzisiejszego wykładu chciałabym Wam opowiedzieć o funkcjach, które w znacznym stopniu ułatwią nam pracę z programem. Pamiętacie, jak robiliśmy obiekt złożony z wielu figur i za każdym razem musieliśmy przypisywać mu parametry takie jak kolor? Po dzisiejszym wykładzie już tego robić nie będziemy musieli - a to za sprawą operacji boolowskich. Słów kilka na temat samych operacji boolowskich. Przyjrzyjcie się uważnie rysunkowi: Jak widać na rysunku mamy trzy podstawowe operacje boolowskie, którymi będziemy się zajmować: sumę, różnicę oraz część wspólną. Sumą dwóch zbiorów, jak nie trudno się domyślić, nazywamy taki zbiór, który zawiera wszystkie elementy obu zbiorów - i nic poza tym. Dlaczego operacja ta może okazać się przydatna? Głównie dlatego, że teraz będziecie mogli już grupować tworzone obiekty. To z kolei niesie ze sobą mnóstwo kolejnych udogodnień. Ale zobaczmy, jak to działa na przykładzie. Przypomnijmy sobie kwiat, który stworzyliśmy na poprzednim wykładzie. Kod wyglądał tak: cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}} rotate<0,0,30>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}rotate<0,0,60>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}rotate<0,0,90>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}rotate<0,0,120>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}rotate<0,0,150>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 texture{pigment{color Red}}rotate<0,0,180>} Nietrudno zauważyć, że w naszym programie często pojawia się to samo polecenie texture{pigment{color Red}}. Co prawda w przypadku podobnym do tego, gdy kolejne figury są jedynie przekształceniem figury podstawowej większej różnicy pozornie może nie zrobić nam kopiowanie linijki wraz z tym poleceniem, jednak wygląda to dość niestarannie i sprawia, że kod staje się zdecydowanie mniej czytelny. Ponadto, gdybyśmy wzięli zupełnie inne obiekty, które miałby mieć ten sam kolor, sprawa stałaby się znacznie bardziej uciążliwa. Pomoc w rozwiązaniu tego problemu niesie właśnie możliwość zastosowania sumy boolowskiej dzięki temu wszystkie obiekty wchodzące w jej skład mogą mieć ten sam bez potrzeby deklarowania go w każdym obiekcie. Efekt sumy boolowskiej zyskujemy dzięki poleceniu union. A oto jak będzie wyglądał nasz kod jeśli użyjemy tego polecenia: union{ cylinder{<0,-1.2,0> <0,1.2,0> 0.2 } cylinder{<0,-1.2,0> <0,1.2,0> 0.2 rotate<0,0,30>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 rotate<0,0,60>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 rotate<0,0,90>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 rotate<0,0,120>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 rotate<0,0,150>} cylinder{<0,-1.2,0> <0,1.2,0> 0.2 rotate<0,0,180>} texture{pigment{color Red}} } 15

Jestem pewna, że już niebawem, każdy użytkownik Pov-Raya doceni zalety tego polecenia, ale, ale... Zobaczmy co się stanie jeśli nadamy naszemu obiektowi teksturę Glass!!! Chyba nie do końca tego się spodziewaliśmy. Tekstura szkła pozwala zauważyć niedoskonałość polecenia union. Niedoskonałość, która zachowuje wszystkie warstwy i jedynie nakłada je na siebie zamiast łączyć. Aby zniweczyć ten efekt można zastosować alternatywną wersję sumy boolowskiej - wersję stosowaną w przypadku obiektów przezroczystych. Mam tutaj na myśli polecenie: merge. Stosuję się dokładnie tak jak polecenie union. Wystarczy zatem, że w kodzie zamienimy union na merge i otrzymamy zupełnie inny efekt: Warto mieć to na uwadze tworząc przezroczyste obiekty złożone z wielu figur. Rozpoczynając dzisiejszy wykład wspomniałam również o możliwości wykorzystania róznicy boolowskiej. Zastosowanie jest oczywiste - różnicę stosujemy kiedy chcemy z jednej figury wyciąć jakąś inną. Załóżmy zatem, że mamy prostopadłościan, który jest w naszym mniemaniu ścianą i bardzo chcemy, żeby w naszej ścianie znalazły się okna. Do wycinania służy polecenie difference. Stosując to polecenie należy pamiętać o dwóch bardzo ważnych rzeczach: po pierwsze w składni polecenia najpierw podajemy obiekt, z którego chcemy coś wyciąć (odjemna) a dopiero potem to, co chcemy wyciąć (odjemnik) a po drugie obiekt wycinany musi chociaż na jednej osi mieć większy rozmiar. Zobaczmy jak wygląda kod ściany z przykładu: difference { box{<3,0,-2> <-2,2,-2> texture{pigment{color Red}}} 16

box{<2.5,0.6,3> <1,1.7,-3> } box{<2.5,0.6,3> <1,1.7,-3> translate<-2.5,0,0> } } Nietrudno zauważyć, że szerokość po osi z-ów odjemnika (6 jednostek) jest większa niż szerokość odjemnej (4 jednostki). Bez tego nici z wycinania. Ostatnim poleceniem, jakie dziś omówimy jest polecenie intersection służące do ilustrowania części wspólnej. Na podstawie własnego doświadczenia mogę stwierdzić, że jest to komenda używana najrzadziej z całej poznanej dzisiaj trójki, niemniej radę ją zapamiętać. Załóżmy, że chcemy stworzyć następujący obiekt: Polecenie intersection umożliwia uzyskanie takiego efektu dzięki zaledwie kilku liniom kodu. intersection { sphere{<0,0,0> 1 texture{ pigment{color Red}}} sphere{<0.8,0,0> 1 texture{ pigment{color Red}}} } Jak widać obiekt został stworzony z dwóch kul. Warto zauważyć, że polecenie intersection nie narzuca nam obowiązku określania kolejności elementów znajdujących się w nim. Bez względu na to, którą kule wymienimy jako pierwszą efekt będzie ten sam. To wszystko na dziś. Dziękuję za uwagę. Zadanie: Stwórz następujący obraz: 17