// ====================================================================== // CORES E TEXTURAS background { color rgb < 0.75, 0.80, 0.85 > } // ====================================================================== // DESCRIÇÃO DA CENA #declare olho = union { sphere { <0, 0, 0>, 0.2 pigment { color rgb <1, 1, 1> } } sphere { <0, 0.12, 0>, 0.1 pigment { color rgb <0, 0, 0> } } } #declare orelha = difference { #local s = 0.55; sphere { <0, 0, s>, s scale <1, 0.3, 2> } sphere { <0, 0, s>, s scale <1, 0.3, 2> translate <0, s/4, 0> } } #declare pelo = cylinder { <0, 0, 0>, <1, 0, 0>, 0.01 } #declare narina = union { sphere { <0, 0, 0>, 0.3 } object { pelo rotate <0, -10, 0> } object { pelo rotate <0, 0, 0> } object { pelo rotate <0, +10, 0> } } #declare cabeca = union { sphere { <0, 0, 0>, 1 scale <1.1, 1, 1.2> } object { orelha translate <-0.8, 0, 0.6> } object { orelha translate < 0.8, 0, 0.6> } #local a = 40; object { olho rotate <-a, 0, -30> translate <0, 1, 0> rotate <+a, 0, +30> } object { olho rotate <-a, 0, +30> translate <0, 1, 0> rotate <+a, 0, -30> } sphere { narina rotate <10, 0, 30> scale <-1, 1, 1> translate <0, 1, 0> rotate <0, 0, +10> } sphere { narina rotate <10, 0, 30> translate <0, 1, 0> rotate <0, 0, -10> } pigment { color rgb <1, 1, 1> } translate <0, 0, 1.2> } #declare relogio = union { difference { cylinder { <0, 0, 0>, <0, 0.2, 0>, 0.4 } cylinder { <0, -0.1, 0>, <0, 0.3, 0>, 0.3 } pigment { color rgb <0.2, 0.2, 1> } } cylinder { <0, 0, 0>, <0, 0, 0.1>, 0.2 translate <0, 0.1, 0.35> pigment {color rgb <0.6, 0.6, 0.6> } } } #macro pata(c) union { // Marca a origem sphere { <0, 0, 0>, 0.1 pigment { color rgb <1, 0, 0> } } union { difference { sphere { <0, 0, 0>, 0.4 scale <1, 1.3, 1> } box { <-1, -1, 0>, <1, 1, -1> } #local tr = 0.4 * sqrt(2)/2; translate <0, 1.3*tr, -tr> } rotate pigment { color rgb <1, 1, 1> } } } #end #macro ante(b, c, rel) union { cylinder { <0, 0, 0>, <0, 1, 0>, 0.3 pigment { color rgb <1, 1, 1> } } #if (rel = true) object { relogio translate <0, 0.7, 0> } #end sphere { <0, 1, 0>, 0.3 pigment { color rgb <1, 1, 1> } } object { pata(c) translate <0, 1.2, 0> } rotate } #end #macro ante_ante(a, b, c, tilt, rel) union { sphere { <0, 0, 0>, 0.3 pigment { color rgb <1, 1, 1> } } cylinder { <0, 0, 0>, <0, 0, -1>, 0.3 pigment { color rgb <1, 1, 1> } } sphere { <0, 0, -1>, 0.3 pigment { color rgb <1, 1, 1> } } object { ante(b, c, rel) translate <0, 0, -1> } rotate <0, -tilt, 0> rotate } #end #macro perna(a, b, c) object { ante_ante(a, b-90, c+90, 0, false) } #end #macro braco(a, b, c, rel) object { ante_ante(a, b-90, c, 15, rel) } #end #macro corpo(a1, b1, c1, a2, b2, c2, a3, b3, c3, a4, b4, c4) union { #local raio = 0.5; sphere { <0, 0, 0>, raio } cylinder { <0, 0, 0>, <0, 0, -1>, raio } sphere { <0, 0, -1>, raio } object { braco(a1, b1, c1, true) translate } object { braco(a2, b2, c2, false) translate scale <-1, 0, 0> } object { perna(a3, b3, c3) rotate <0, 0, -30> translate } object { perna(a4, b4, c4) rotate <0, 0, -30> translate scale <-1, 0, 0> } object { rabo translate <0, -raio, -1> } pigment { color rgb <1, 1, 1> } } #end #declare rabo = sphere { <0, 0, 0>, 0.3 pigment { color rgb <1, 1, 1> } } // a = ante-braco ou ante-perna // b = braco ou perna // c = pata // 1-2 = bracos esquerdo e direito // 3-4 = pernas esquerda e direita #macro coelho(a1, b1, c1, a2, b2, c2, a3, b3, c3, a4, b4, c4, cab) union { object { cabeca scale 0.8 rotate <0, 0, cab> translate <0, 0, 0.5> } object { corpo(a1, b1, c1, a2, b2, c2, a3, b3, c3, a4, b4, c4) } } #end #declare chao = box { <-20, -20, 0>, <20, 20, 0> pigment { image_map { jpeg "grama.jpg" } scale <5, 5, 1> } } #declare NQ = 6; #declare argA1 = array[NQ]; #declare argA2 = array[NQ]; #declare argA1[0] = 0; #declare argA2[0] = 0; #declare argA1[1] = 180; #declare argA2[1] = 0; #declare argA1[2] = 0; #declare argA2[2] = 180; #declare argA1[3] = 180; #declare argA2[3] = 180; #declare argA1[4] = 180; #declare argA2[4] = 180; #declare argA1[5] = 0; #declare argA2[5] = 0; #declare argA3 = array[NQ]; #declare argA4 = array[NQ]; #declare argA3[0] = 0; #declare argA4[0] = 0; #declare argA3[1] = 150; #declare argA4[1] = 0; #declare argA3[2] = 0; #declare argA4[2] = 150; #declare argA3[3] = 150; #declare argA4[3] = 150; #declare argA3[4] = 0; #declare argA4[4] = 0; #declare argA3[5] = 0; #declare argA4[5] = 0; #declare argB3 = array[NQ]; #declare argB4 = array[NQ]; #declare argB3[0] = 0; #declare argB4[0] = 0; #declare argB3[1] = -150; #declare argB4[1] = 0; #declare argB3[2] = 0; #declare argB4[2] = -150; #declare argB3[3] = -150; #declare argB4[3] = -150; #declare argB3[4] = 0; #declare argB4[4] = 0; #declare argB3[5] = 0; #declare argB4[5] = 0; #declare argZ = array[NQ]; #declare argZ[0] = 0; #declare argZ[1] = 0; #declare argZ[2] = 0; #declare argZ[3] = -1.6; #declare argZ[4] = 0; #declare argZ[5] = 0; #declare tempo = array[NQ]; #declare tempo[0] = 0.0; #declare tempo[1] = 0.2; #declare tempo[2] = 0.4; #declare tempo[3] = 0.6; #declare tempo[4] = 0.8; #declare tempo[5] = 1.0; #macro interpola(f0, v0, f1, v1, f) #local ss = (f-f0)/(f1-f0); #local rr = 1-ss; (rr * v0 + ss * v1) #end #macro boneco_dancando(fase) #local bb = int((NQ-1) * fase); #local a1 = interpola(bb, argA1[bb], bb+1, argA1[bb], fase); #local a2 = interpola(bb, argA2[bb], bb+1, argA2[bb], fase); #local a3 = interpola(bb, argA3[bb], bb+1, argA3[bb], fase); #local a4 = interpola(bb, argA4[bb], bb+1, argA4[bb], fase); #local b3 = interpola(bb, argB3[bb], bb+1, argB3[bb], fase); #local b4 = interpola(bb, argB4[bb], bb+1, argB4[bb], fase); #local zz = interpola(bb, argZ[bb] , bb+1, argZ[bb] , fase); object { coelho(a1, 0, 0, a2, 0, 0, a3, b3, 0, a4, b4, 0, 0) translate <0, 0, zz> } #end union { #local i = 0; #local N = 6; #while (i <= N) object { boneco_dancando(i/N) translate <3*i, 0, 0> } #local i = i + 1; #end //#local alfa = 5.0/N; //scale <-alfa, alfa, alfa> translate <-7.5, 0, 0> } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 6.0; #declare dir_camera = < 0, 1, 0.5 >; #declare dist_camera = 40.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)