//Title: RAINBOW ROAD
//Author: Andrey Nikolov
// T9925193


#include "colors.inc"

camera {
location <0, 50, -200>
look_at <0, 50, 0>
angle 80
}
background { color SkyBlue }
plane { y, -500
texture {
pigment { color Blue }
normal { bumps 100 scale 500 }
finish { phong 1}
}
}


light_source {<100, 120, 40> color White}

// Rosewood
#declare Rosewood = texture {
pigment {
bozo
turbulence 0.04
color_map {
[0.000, 0.256 color red 0.204 green 0.110 blue 0.078 filter 0.000
color red 0.231 green 0.125 blue 0.090 filter 0.000]
[0.256, 0.393 color red 0.231 green 0.125 blue 0.090 filter 0.000
color red 0.247 green 0.133 blue 0.090 filter 0.000]
[0.393, 0.581 color red 0.247 green 0.133 blue 0.090 filter 0.000
color red 0.204 green 0.110 blue 0.075 filter 0.000]
[0.581, 0.726 color red 0.204 green 0.110 blue 0.075 filter 0.000
color red 0.259 green 0.122 blue 0.102 filter 0.000]
[0.726, 0.983 color red 0.259 green 0.122 blue 0.102 filter 0.000
color red 0.231 green 0.125 blue 0.086 filter 0.000]
[0.983, 1 color red 0.231 green 0.125 blue 0.086 filter 0.000
color red 0.204 green 0.110 blue 0.078 filter 0.000]
}
scale <0.5, 0.5, 1>
translate 10*x
}
finish {
ambient 0.5
diffuse 0.8
}
}

// Rosewood layer 2
texture {
pigment {
wood
turbulence 0.04
color_map {
[0.000, 0.139 color red 0.545 green 0.349 blue 0.247 filter 1.000
color red 0.000 green 0.000 blue 0.000 filter 0.004]
[0.139, 0.148 color red 0.000 green 0.000 blue 0.000 filter 0.004
color red 0.000 green 0.000 blue 0.000 filter 0.004]
[0.148, 0.287 color red 0.000 green 0.000 blue 0.000 filter 0.004
color red 0.545 green 0.349 blue 0.247 filter 1.000]
[0.287, 0.443 color red 0.545 green 0.349 blue 0.247 filter 1.000
color red 0.545 green 0.349 blue 0.247 filter 1.000]
[0.443, 0.626 color red 0.545 green 0.349 blue 0.247 filter 1.000
color red 0.000 green 0.000 blue 0.000 filter 0.004]
[0.626, 0.635 color red 0.000 green 0.000 blue 0.000 filter 0.004
color red 0.000 green 0.000 blue 0.000 filter 0.004]
[0.635, 0.843 color red 0.000 green 0.000 blue 0.000 filter 0.004
color red 0.545 green 0.349 blue 0.247 filter 1.000]
[0.843, 1 color red 0.545 green 0.349 blue 0.247 filter 1.000
color red 0.545 green 0.349 blue 0.247 filter 1.000]
}
scale <0.5, 0.5, 1>
translate <10, 0, 0>
}
finish {
ambient 0.5
diffuse 0.8
}
}

// declare rainbow's colors
#declare r_violet1 = color rgbf<1.0, 0.5, 1.0, 1.0>;
#declare r_violet2 = color rgbf<1.0, 0.5, 1.0, 0.8>;
#declare r_indigo = color rgbf<0.5, 0.5, 1.0, 0.8>;
#declare r_blue = color rgbf<0.2, 0.2, 1.0, 0.8>;
#declare r_cyan = color rgbf<0.2, 1.0, 1.0, 0.8>;
#declare r_green = color rgbf<0.2, 1.0, 0.2, 0.8>;
#declare r_yellow = color rgbf<1.0, 1.0, 0.2, 0.8>;
#declare r_orange = color rgbf<1.0, 0.5, 0.2, 0.8>;
#declare r_red1 = color rgbf<1.0, 0.2, 0.2, 0.8>;
#declare r_red2 = color rgbf<1.0, 0.2, 0.2, 1.0>;

// create rainbow
rainbow {
angle 40
width 4
distance 1.0e7
direction <-0.2, -0.2, 1>
jitter 0.01
color_map {
[0.000 color r_violet1]
[0.100 color r_violet2]
[0.214 color r_indigo]
[0.328 color r_blue]
[0.442 color r_cyan]
[0.556 color r_green]
[0.670 color r_yellow]
[0.784 color r_orange]
[0.900 color r_red1]
}
}

//sky
#include "skies.inc"
sky_sphere {S_Cloud1}

#declare comet = object { sphere{<-800,0,1500>,50}
}

#declare block = object {
box{ <0, 0, 0> < 100, 10, 12> }
texture {
Rosewood
finish {
phong 1.0
ambient 0.5
diffuse 0.7
}
}
}

#declare rail = object {
box{ <0, 0, 0> < 2, 7, 20> }
texture {
pigment {Gray}
finish {
phong 1.0
ambient 0.5
diffuse 0.7
metallic
}
}
}

#declare railleft = object {
rail
translate <18, 10, 0>
}

#declare railright = object {
rail
translate <82, 10, 0>
rotate -x*25
}

#declare lanemark = object {
box{ <0, 0, 0> < 10, 2, 50> }
texture {
pigment {Yellow*0.6}
normal { bumps }
finish {
phong 1.0
ambient 0.5
diffuse 0.7
}
}
translate <550,-143,0>
rotate -x*27
}

#declare pavement = object {
box{ <0, 0, 0> < 110, 7, 42> }
texture {
pigment {Gray*0.3}
normal { bumps }
finish {
phong 1.0
ambient 0.5
diffuse 0.7
}
}
translate <500,-150,0>
rotate -x*27
}

//Macro Comet
#macro Sunrise (time, passedobj)
object {
passedobj
pigment { color Yellow*(1-time)*3 }
translate x*time*2000
translate y*sin(pi*time)*1000-300
translate z*9000*time
}
#end

//Macro Railroad
#macro Railroad (time, passedobj)
object {
passedobj
translate x*time*2000+50
translate y*sin(pi*time)*500-300
translate z*9000*time
scale 1-time
}
#end

//Macro Highway
#macro Highway (time, passedobj)
object {
passedobj
translate x*time*1700+50
translate y*sin(pi*time)*700-300
translate z*9000*time
scale 1-time
}
#end

//Macro Comet invocation
#declare Count=0;
#while (Count < 1)
Sunrise(Count,comet)
#declare Count=Count+0.04;
#end

//Macro Railroad Block invocation
#declare Count=0;
#while (Count < 0.72)
Railroad(Count, block)
#declare Count=Count+0.008;
#end

//Macro Railroad Rails invocation
#declare Count=0;
#while (Count < 0.72)
Railroad(Count, railleft)
Railroad(Count, railright)
#declare Count=Count+0.0002;
#end

//Macro Highway invocation
#declare Count=0;
#while (Count < 0.72)
Highway(Count, pavement)
#declare Count=Count+0.004;
#end

//Macro LaneLine invocation
#declare Count=0;
#while (Count < 0.72)
Highway(Count, lanemark)
#declare Count=Count+0.012;
#end

//Text annotation
text { ttf "crystal.ttf", "RAINBOW ROAD", 1, 0
translate <-2, 0, 8>
pigment { color White }
finish {
ambient 0.2
diffuse 0.6
phong 0.3
phong_size 100
}
scale <15, 15, 0>
rotate <20, 0, 0>
translate <30, -120,80>
}