#include "colors.inc" #include "stones.inc" #include "textures.inc" global_settings { assumed_gamma 2.0 } background { color .10 } #version 3.1; #declare R0 = 4; // raggio iniziale dell'elica #declare R1 = 4 * (1.001 -clock); // raggio finale dell'elica #declare height = 8; // altezza dell'elica #declare thetamax = clock * 3 * pi; #declare steps = 80; // step in cui e` divisa l'elica #declare r0 = 1.25; // raggio del tubo alla base #declare r1 = 0.01; // raggio del tubo in cima #declare isteps = 16; #macro curve(T, R, H, THETAMAX) (< R * cos(THETAMAX * T), H * T, R * sin(THETAMAX * T) >) #end #declare shell = union { #declare points = array[steps][isteps] // matrice 80 * 16 #declare centers = array[steps] // array di 80 elementi #declare rr = R0 - (R1 - R0) / steps; #declare pp0 = curve(-1 / steps, rr, height, thetamax); #declare step = 0; #while (step < steps) #declare tt = step / (steps - 1); #declare rr = R0 + (R1 - R0) * tt; #declare pp = curve(tt, rr, height, thetamax); #declare centers[step] = pp; #declare nn = vnormalize(pp - pp0); #declare theta_nn = acos(nn.y); #declare phi_nn = atan2(nn.z , nn.x); #declare istep = 0; #while (istep < isteps) #declare uu = 2 * pi * istep / (isteps - 1); // angolo della cfr #declare rradius = r0 + (r1 - r0) * tt; #declare aa = rradius * ; #declare aa = vaxis_rotate(aa, z, -degrees(theta_nn)); #declare aa = vaxis_rotate(aa, y, -degrees(phi_nn)); #declare points[step][istep] = aa; #declare istep = istep + 1; #end #declare pp0 = pp; #declare step = step + 1; #end #declare step = 0; #while (step < steps - 1) #declare istep = 0; #while (istep < isteps - 1) #declare cc0 = centers[step]; #declare cc1 = centers[step + 1]; #declare aa = points[step][istep]; #declare bb = points[step + 1][istep]; #declare cc = points[step + 1][istep + 1]; #declare dd = points[step][istep + 1]; object { smooth_triangle { cc0 + aa, aa cc1 + bb, bb cc1 + cc, cc } } object { smooth_triangle { cc0 + aa, aa cc1 + cc, cc cc0 + dd, dd } } #declare istep = istep + 1; #end #declare step = step + 1; #end } object { shell texture { PinkAlabaster } } object { shell texture { Silver_Metal } rotate y * 180 } // Polished_Chrome /*sky_sphere { pigment { gradient y color_map { [0 color MidnightBlue] [1 color LightBlue] }} pigment { bozo turbulence 0.65 octaves 6 omega 0.7 lambda 2 color_map { [0.0 0.1 color rgb <0.85, 0.85, 0.85> color rgb <0.75, 0.75, 0.75>] [0.1 0.5 color rgb <0.75, 0.75, 0.75> color rgbt <1, 1, 1, 1>] [0.5 1.0 color rgbt <1, 1, 1, 1> color rgbt <1, 1, 1, 1>] } scale <0.1, 0.1, 0.1> } } */ camera { location < 1.5, 4,-10.75> look_at < 0, 3.4, 0> } light_source { <0, 0,-5> color rgb 1 } light_source { <5, 5, -4> color rgb 1 }