PovRay - Zestaw 2

Transkrypt

PovRay - Zestaw 2
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
}
light_source { <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.
box {
<-1, 0,
-1>, // lewy dolny rog
< 1, 0.5, 3>
// prawy gorny rog
texture {
T_Stone25
// tekstura z bilbioteki stones.inc
}
scale <0.4,2,3> // skalowanie, inne w różnych kierunkach
}
b) translate – przesuwa obiekty o zadany wektor, np.
box {
<-1, 0,
-1>, //
< 1, 0.5, 3>
//
texture {
T_Stone25
//
}
translate <1,2,2>
}
lewy dolny rog
prawy gorny rog
tekstura z bilbioteki stones.inc
// przesuniecie o zadany wektor
c) rotate – obraca obiekty o zadany kąt w zadanym kierunku
box {
<-1, 0,
-1>, // lewy dolny rog
< 1, 0.5, 3>
// prawy gorny rog
texture {
T_Stone25
// tekstura z bilbioteki stones.inc
}
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.
box {
<-1, 0,
-1>, // lewy dolny rog
< 1, 0.5, 3>
// prawy gorny rog
texture {
T_Stone25
// tekstura z bilbioteki stones.inc
}
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{
sphere { <0, 0, 0>, 1
pigment { Blue }
translate <-0.5,0,0>
}
sphere { <0, 0, 0>, 1
pigment { Red }
translate <0.5,0,0>
}
}
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{
sphere { <0, 0, 0>, 1
translate <-0.5,0,0>
}
sphere { <0, 0, 0>, 1
translate <0.5,0,0>
}
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
intersection {
sphere { <0, 0, 0>, 1
translate <-0.5,0,0>
}
sphere { <0, 0, 0>, 1
translate <0.5,0,0>
}
pigment { Red }
}
c) difference – różnica obiektów (zauważmy, że operacje można zagnieżdżać)
difference {
intersection {
sphere { <0, 0, 0>, 1
translate <-0.5,0,0>
}
sphere { <0, 0, 0>, 1
translate <0.5,0,0>
}
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 {
intersection {
sphere { <0, 0, 0>, 1
translate <-0.5,0,0>
}
sphere { <0, 0, 0>, 1
translate <0.5,0,0>
}
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
object { dziurawaSoczewka
object { dziurawaSoczewka
object { dziurawaSoczewka
pigment { Red }
}
translate
translate
translate
translate
<-0.65, 0.65, 0> }
<0.65, 0.65, 0> }
<-0.65, -0.65, 0> }
<0.65, -0.65, 0> }
d) merge – scalanie obiektów, podobne do union ale zobaczmy różnice:
merge {
object
object
object
object
{
{
{
{
dziurawaSoczewka
dziurawaSoczewka
dziurawaSoczewka
dziurawaSoczewka
translate
translate
translate
translate
<-0.65, 0.65, 0> }
<0.65, 0.65, 0> }
<-0.65, -0.65, 0> }
<0.65, -0.65, 0> }
pigment { Red filter .5 }
}
Rodzaje oświetlenia
Rozróżniamy kilka rodzajów oświetlenia:
a) Zwykła żarówka:
light_source {
<2, 10, -3>
color White
}
// mozliwy dowolny kolor swiatla
b) Oświetlenie punktowe:
light_source {
<0, 10, -3>
color White
spotlight
radius 15
falloff 20
tightness 10
point_at <0, 0, 0>
}
// rodzaj oswietlenia - punktowe
// promien stozka swietlnego
// miejsce padania swiatla
c) Oświetlenie cylindryczne:
light_source {
<0, 10, -3>
color White
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.
light_source {
<2, 10, -3>
color White
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

Podobne dokumenty