Metoda praćenja zrake (engl. ray tracing)

Marija Arki i Luka Majstorović

Uključivanje biblioteka

Uključujemo razne biblioteke navedene ispod kako bi se mogle koristiti njihovi assetsi i opcije.
                
                    #include "colors.inc"
                    #include "textures.inc"
                    #include "shapes.inc"
                    #include "metals.inc"
                    #include "glass.inc"
                    #include "woods.inc"
                    #include "functions.inc"
                
              

Postavljanje kamere

Kako bismo mogli vidjeti sliku, potrebno je postaviti kameru
                
                    camera 
                    {
                       angle 110
                       location <0, 6, 6>
                       right x*image_width/image_height
                       look_at <0,0,0>
                    }
                
              

Postavljanje izvora svjetlosti

Definirana su dva izvora svjetlosti. Po potrebi se drugi izvor može "odkomentirati" te samim time uključiti.
                
                    light_source 
                    {
                        <-25,50,-15> 
                        color White 
                    }
                    /*
                    //Postavljanje drugog izvora svjetlosti
                    light_source 
                    {
                        <25,50,-15> 
                        color White 
                    }*/ 
                
              

Kreiranje stošca

Ispod je naveden kod potreban kako bi se kreirao stožac.
Metodom cone kreiramo objekt stošca kojem dodjeljujemo parametre.
Parametri su koordinate stošca te duljine njegovih promjera pri vrhu i dnu.
Isto tako, dodjeljena mu je tekstura Chrome_Texture, koja će biti dodjeljena svim objektima na dalje.
Razlog tome je što navedena tekstura ima odlična reflektivna
svojstva i odlično prikazuje funkcionalnosti ray tracing-a.
Naposljetku, dodijeljena mu je boja pomoću pigment svojstva
                
                    cone
                    {
                        <0,-8,0>,
                        3,
                        <0,4,0>,
                        0
                    
                        texture 
                        {
                            Chrome_Texture
                        }
                        pigment
                        {
                            rgb<0.5, 0.5, 0.5>
                        }
                        
                    } 
                
              

Kreiranje valjka (na vrhu)

Slično kao i kod stošca, valjak je definiran koordinatama te visinom.
Kod valjka se pojavljuje novo svojstvo, a to je translate.
Ovo svojstvo se koristi kako bi pomaknuli valjak na vrh stošca te time kreirali
željeni oblik vjetromjera.
                
                    cylinder
                    {
                        <0,0,0>,
                        <0,0.5,0>,
                        0.5
                        
                        translate <0, 3.5, 0>
                        texture
                        {
                            Chrome_Texture
                        }
                        pigment
                        {
                            rgb<0.18,0.18,0.18>
                        } 
                    }
                
              

Kreiranje lopate (valjak + kugla)

Definiranje valjka jednako je kao i kod prethodno opisanog. Novina je atribut
rotate koji koristimo kako bi okretali objekt te kreirali prikaz kao što je
zadan zadatkom. Druga komponenta lopate je kugla koja se sastoji od koordinata promjera.
Kod nje je također potrebno definirati pokret kod animacije. Ovaj se proces ponavlja 3 puta
za svaku od lopata te iste neće biti opisane, s obzirom da su razlike isključivo u rotaciji
te translaciji.
                
                    //Valjak 1
                    cylinder
                    {
                        <0,2.5,0>,
                        <0,0,0>,
                        0.15
                        
                        translate <3.7, 0, 0>
                        rotate < clock*360,0,90>
                        texture 
                        {
                            Chrome_Texture
                        }
                        pigment
                        {
                            rgb<0.4,0.4,0.4>
                        } 
                     
                    }
                    //Kugla 1
                    sphere
                    {
                        <0, 0, 0>, 
                        0.5
                        translate <3.7, 2.5, 0>
                        rotate < clock*360,0,90>
                        texture 
                        {
                            Chrome_Texture
                        }
                        pigment
                        {
                            rgb<0.18,0.18,0.18>
                        }  
                    
                        
                    }
                
              

Kreiranje podloge

U svrhu kreiranja podloge, korištena je funkcija plane koja nam omogućuje
da joj dodijelimo teksturu te njen intenzitet.
                
                    plane { y,0 
                        pigment { Brown_Agate scale 0.1 }
                    }