// ====================================================================== // CÂMERA camera { //girando e subindo location < 100*cos(pi*clock/3), 10*clock, 100*sin(pi*clock/3) > // Posição do observador. right -1.0*x // Largura RELATIVA da imagem. up 0.75*y // Altura RELATIVA da imagem. sky y // Qual direção é "para cima"? look_at <0,0,0> // Para onde a câmera está apontando. } /* camera { //andando para a direita e para a frente location < -70 + 12*clock , 0, -80 + 24*clock > // Posição do observador. right -1.0*x // Largura RELATIVA da imagem. up 0.75*y // Altura RELATIVA da imagem. sky y // Qual direção é "para cima"? look_at < -70 + 12*(clock+0.05) , 0.00, -80 + 24*(clock+0.05)> // Para onde a câmera está apontando. } */ /* //descendo camera { location < 0 , 100 - 50*clock, -30> // Posição do observador. right -1.0*x // Largura RELATIVA da imagem. up 0.75*y // Altura RELATIVA da imagem. sky y // Qual direção é "para cima"? look_at < 0,-100, -30 > // Para onde a câmera está apontando. } */ // Nota: os parâmetros "right" e "up" devem ter a mesma proporção // que os parâmetros ${WIDTH} e ${HEIGHT} no Makefile. // ====================================================================== // FONTES DE LUZ light_source { 10 * < -50.0, 50.0, -50.0 > // Posição da lâmpada. color rgb 1.2 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } light_source { 10 * < 50.0, 50.0, 50.0 > // Posição da lâmpada. color rgb 0.8 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } light_source { 10 * < -50.0, -50.0, -50.0 > // Posição da lâmpada. color rgb 0.8 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } light_source { 10 * < 50.0, -50.0, 50.0 > // Posição da lâmpada. color rgb 1.2 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } // ====================================================================== // DESCRIÇÃO DA CENA background{ color rgb < 1, 1, 1 > } #declare source=seed(2718281828); #declare preto = texture { pigment { color rgb < 0, 0, 0 > } finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 } } #declare rnoh=1.5; #macro noh(x0,y0,z0) #declare a = rand(source); #declare b = rand(source); #declare c = rand(source); object { sphere { ,rnoh texture {pigment {color rgb } /* finish { ambient 0.05 diffuse 0.05 reflection {color rgb} specular 0.2 roughness 0.05 }*/ } }} #end #macro aresta(x0,y0,z0,x1,y1,z1) object { cylinder { ,,0.2 texture { preto } }} #end #macro pacote(lx,ly,lz,cr,cg,cb) box { <-lx/2,-ly/2,-lz/2>, texture {pigment {color rgb } /*finish { diffuse 0.3 reflection 0.25 specular 1 roughness 0.01 }*/ } /*interior { ior 1.5 }*/ } #end #macro criax(x0,y0,z0,xa,xb) #declare lx = 3 + rand(source)*5; #declare ly = 3; #declare lz = 1+rand(source)*3; #declare cr=rand(source); #declare cg=rand(source); #declare cb=rand(source); #if( ( (x0 - lx/2) > xa+rnoh) & ( (x0 + lx/2) < (xb - rnoh))) object { pacote(lx,ly,lz,cr,cg,cb) translate } #end #end #macro criay(x0,y0,z0,ya,yb) #declare lx = 1+rand(source)*3; #declare ly = 3 + rand(source)*5; #declare lz = 3; #declare cr=rand(source); #declare cg=rand(source); #declare cb=rand(source); #if( ( (y0 - ly/2) > ya+rnoh) & ( (y0 + ly/2) < (yb - rnoh))) object { pacote(lx,ly,lz,cr,cg,cb) translate } #end #end #macro criaz(x0,y0,z0,za,zb) #declare lx = 1+rand(source)*3; #declare ly = 3; #declare lz = 3 + rand(source)*5; #declare cr=rand(source); #declare cg=rand(source); #declare cb=rand(source); #if( ( (z0 - lz/2) > za+rnoh) & ((z0 + lz/2 < zb - rnoh))) object { pacote(lx,ly,lz,cr,cg,cb) translate } #end #end #declare tlx = 100; #declare tly = 60; #declare tlz = 100; #declare nx = 5; #declare ny = 3; #declare nz = 5; #declare x0 = -tlx/2; #declare y0 = -tly/2; #declare z0 = -tlz/2; #declare dx = tlx/nx; #declare dy = tly/ny; #declare dz = tlz/nz; #declare pp = 0.6; //probabilidade de existir 1 pacote em uma aresta #declare i = 0; #while(i < nx) #declare j = 0; #while(j < nz) #declare k = 0; #while(k < ny) noh(x0+i*dx,y0+k*dy,z0+j*dz) #if(i+1 < nx) aresta(x0+i*dx,y0+k*dy,z0+j*dz,x0+(i+1)*dx,y0+k*dy,z0+j*dz) #if (rand(source) < pp) criax(x0+i*dx+dx*(rand(source) + 2*(rand(source)-1/2)*clock),y0+k*dy,z0+j*dz,x0+i*dx,x0+(i+1)*dx) #end #end #if(j+1 < nz) aresta(x0+i*dx,y0+k*dy,z0+j*dz,x0+i*dx,y0+k*dy,z0+(j+1)*dz) #if (rand(source) < pp) criaz(x0+i*dx,y0+k*dy,z0+j*dz+dz*(rand(source) + 2*(rand(source)-1/2)*clock),z0+j*dz,z0+(j+1)*dz) #end #end #if(k+1 < ny) aresta(x0+i*dx,y0+k*dy,z0+j*dz,x0+i*dx,y0+(k+1)*dy,z0+j*dz) #if (rand(source) < pp) criay(x0+i*dx,y0+k*dy+dy*(rand(source) + 2*(rand(source)-1/2)*clock),z0+j*dz,y0+k*dy,y0+(k+1)*dy) #end #end #declare k = k+1; #end #declare j = j+1; #end #declare i = i+1; #end