#include "eixos.inc" background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_fosca = texture{ pigment{ color rgb < 1.00, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_branco = texture{ pigment{ color rgb < 1.00, 1, 1 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_cinza = texture{ pigment{ color rgb < 0.7, 0.7, 0.7 > } finish{ diffuse 0.9 ambient 0.1 } } #declare caixa = box { < -1, -1, 0 >, < 1, 1, 1> } #declare conSection = cone { <0, 0, 0>, 1 <0, 0, 1>, 0.5 } #declare bola = sphere{ < 0,0,0 >, 1 } #declare cilindro = cylinder{ < 0, 0, 0 >, < 0, 0, 1 >, 1 } #declare toco = object { cilindro scale < 0.3, 0.3, 2 > texture{ tx_cinza } } #declare tanque1 = union { union { object { cilindro scale <1, 1, 3> } object { bola translate <0, 0, 3> } texture{ tx_branco } } object { toco translate < 0, 0, 3 > } object { toco rotate < 90, 0, 0 > translate < 0, 0, 2 > } object { toco rotate <0, 90, 0 > translate < 0, 0, 1 > } } #declare tanque2 = union { object { caixa scale <1, 1, 3> texture{ tx_branco } } object { toco translate < 0, 0, 3 > } object { toco rotate < 90, 0, 0 > translate < 0, 0, 2 > } object { toco rotate <0, 90, 0 > translate < 0, 0, 1 > } } #declare tanque3 = union { object { object { conSection } scale <1, 1, 3> texture{ tx_branco } } object { toco translate < 0, 0, 3 > } object { toco rotate < 90, 0, 0 > translate < 0, 0, 2 > } object { toco rotate <0, 90, 0 > translate < 0, 0, 1 > } } #declare scaleAxis = 5; #declare roleta = seed(7); #declare max_mn = 100; #declare tocoQtPorTanque = 3; #declare ttToco = max_mn * max_mn * tocoQtPorTanque; #declare tocosArray = array[ttToco]; #macro gera_tanques(m, n) #declare indiceArray = 0; #declare indexX = 0; #while (indexX < m) #declare indexY = 0; #while (indexY < n) #local random = rand(roleta); #if (random < 0.33) object { tanque1 translate < indexX * scaleAxis, indexY * scaleAxis, 0 >} #else #if (random < 0.66) object { tanque2 translate < indexX * scaleAxis, indexY * scaleAxis, 0 >} #else object { tanque3 translate < indexX * scaleAxis, indexY * scaleAxis, 0 >} #end #end #declare tocosArray[indiceArray] = < indexX * scaleAxis, indexY * scaleAxis, 5 >; #declare tocosArray[indiceArray + 1] = < (indexX * scaleAxis) - 2, indexY * scaleAxis, 2 >; #declare tocosArray[indiceArray + 2] = < indexX * scaleAxis, (indexY * scaleAxis) + 2, 1 >; #declare indiceArray = indiceArray + 3; #declare indexY = indexY + 1; #end #declare indexX = indexX + 1; #end #end #declare altura = 4; #declare mm = 7; #declare nn = 5; union { // object{ eixos(10.00) } gera_tanques(mm, nn) } #declare min_cena = < scaleAxis*(0-0.5), scaleAxis*(0-0.5), 0 >; #declare max_cena = < scaleAxis*(mm-0.5), scaleAxis*(nn-0.5), 0 >; #include "camlight.inc" #declare centro_cena = 0.5*(min_cena + max_cena); #declare raio_cena = 0.6*vlength(min_cena - max_cena); #declare dir_camera = < 3, 5, 4 >; #declare dist_camera = 7*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera, z, intens_luz)