Zajęcia z grafiki komputerowej Pov Ray część 2 Stwórzmy na początek pustą scenę. #include "colors.inc" camera { location <0, 1, -10> look_at 0 angle 36 <500, 500, -1000> White plane { <0,1,0>, -1.5 pigment { checker Green White Transformacje obiektów. Obiekty w przestrzeni można skalować, przesuwać i obracać. Służą do tego następujące komendy: a) scale skaluje obiekty i tekstury, np. scale <0.4,2,3> // skalowanie, inne w różnych kierunkach b) translate przesuwa obiekty o zadany wektor, np. translate <1,2,2> // przesuniecie o zadany wektor c) rotate obraca obiekty o zadany kąt w zadanym kierunku rotate <0,20,0> // obrot o 20 stopni względem osi y
Uwaga: Obroty dokonywane są względem osi układu współrzędnych, a nie względem środka ciężkości obiektu. Dlatego zaleca się najpierw stworzyć i umieścić obiekt w środku układu współrzędnych, następnie go obrócić, a na koniec przesunąć do żądanej lokalizacji, np. rotate <7,20,0> // obrot o zadany kat względem osi <x,y,z> translate <10, 20, 15> Obiekty CSG (Constructive Solid Geometry). Obiekty CSG powstają jako kombinacje obiektów podstawowych, tzw. prymitywów. Dzięki temu możemy stworzyć nieskończenie wiele nowych, skomplikowanych, obiektów. Rozróżniamy cztery rodzaje tych kombinacji: a) union obiekty są do siebie dodawane, innymi słowy są łączone. union{ pigment { Blue pigment { Red Możemy łączyć dowolną liczbę elementów. Każdy obiekt może mieć swoją teksturę ale możemy też nadać wspólną dla całego obiektu: union{ pigment { Red //polaczone obiekty traktowane sa jako jedna calosc scale <1, 0.25, 1> rotate <30, 0, 45> b) intersection część wspólna obiektów
pigment { Red c) difference różnica obiektów (zauważmy, że operacje można zagnieżdżać) difference { pigment { Red rotate <0,90,0> cylinder { <0, 0, -1> <0, 0, 1>, 0.35 pigment { Blue Aby ułatwić sobie pisanie i późniejsze zrozumienie kodu można poszczególnym obiektom składowym nadawać własne nazwy: #declare dziurawasoczewka = difference { rotate <0,90,0> cylinder { <0, 0, -1> <0, 0, 1>, 0.35 Następnie, nasze składowe można wykorzystać do zbudowania bardziej złożonego obiektu: union { object { dziurawasoczewka translate <-0.65, 0.65, 0> object { dziurawasoczewka translate <0.65, 0.65, 0> object { dziurawasoczewka translate <-0.65, -0.65, 0> object { dziurawasoczewka translate <0.65, -0.65, 0> pigment { Red d) merge scalanie obiektów, podobne do union ale zobaczmy różnice: merge { object { dziurawasoczewka translate <-0.65, 0.65, 0> object { dziurawasoczewka translate <0.65, 0.65, 0> object { dziurawasoczewka translate <-0.65, -0.65, 0> object { dziurawasoczewka translate <0.65, -0.65, 0>
pigment { Red filter.5 Rodzaje oświetlenia Rozróżniamy kilka rodzajów oświetlenia: a) Zwykła żarówka: <2, 10, -3> // mozliwy dowolny kolor swiatla b) Oświetlenie punktowe: <0, 10, -3> spotlight // rodzaj oswietlenia - punktowe radius 15 // promien stozka swietlnego falloff 20 tightness 10 point_at <0, 0, 0> // miejsce padania swiatla c) Oświetlenie cylindryczne: <0, 10, -3> cylinder radius 15 falloff 20 tightness 10 point_at <0, 0, 0> // rodzaj oswietlenia - punktowe // promien cylindra swietlnego d) Oświetlenie macierzowe: Oświetlenie to zdeterminowane jest przez dwa wektory, które określają płaszczyznę świecenia i wielkość macierzy, następnie występują dwa parametry liczbowe, które determinują liczbę żarówek. <2, 10, -3> area_light <5, 0, 0>, <0, 0, 5>, 5, 5 // wektory oświetlenia i liczba // zarowek w macierzy, tu 5 na 5, czyli 25 zarowek adaptive 1 jitter
Uwaga: w ramach jednej sceny można dodawać jednocześnie kilka źródeł światła. Na koniec, stosując obiekty CSG, wyrenderujmy klucz podobny do poniższego. Własne udoskonalenia będą mile widziane. Więcej informacji można znaleźć w dokumentacji PovRaya: http://www.povray.org/documentation/3.7.0/t2_2.html#t2_2_3_1