// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2010-03-04 15:44:01 by stolfi // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_chao = texture{ pigment{ color rgb < 0.00, 0.70, 0.00 > } scale 2.0 } #declare tx_plastico = texture{ pigment{ color rgb < 0.10, 0.80, 1.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_fosca = texture{ pigment{ color rgb < 1.00, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } // ====================================================================== // DESCRIÇÃO DA CENA #declare raio = 2.000; // Partes da cena: #declare chao = box{ <-20,-20,-1>, <+20,+20,0> } #declare dispositivo1 = union { difference { box { <0.1,-0.5,0>, <-0.1,0.5,0.8> } box { <0.15,-0.40,0.1>, <-0.15,0.40,0.7> } box { <0.15,-0.15,-0.1>, <-0.15,0.15,0.7> } } } #declare dispositivo = union { difference { sphere { <0,0,0> 0.2 texture { tx_fosca } } box { <0,-0.3,-0.3>, <-0.3,+0.3,+0.3> } rotate <0,-90,0> } } #macro bit(valor, defeito) union { #if (defeito = 0) object{dispositivo} #if (valor = 1) object{dispositivo1 rotate <0,-50,0>} #else object{dispositivo1 rotate <0,50,0>} #end #else object{dispositivo} #end } #end #declare base = union { difference { box { <1.5,-1.5,-0.2>, <-1.5,1.5,+0.2> texture { tx_plastico } translate <0,0,0.12> } box { <1.25,-1.25,-0.2>, <-1.25,1.25,+0.4> texture { tx_plastico } translate <0,0,0.12> } } } #macro fileira(n, valor, prob) #local i = 0; #local pos = n; #local numero = valor; union { #while(i < n) #local def = (rand(roleta) < prob); object{bit(mod(numero,2),def) translate <0,pos,0>} #local numero = int(numero/2); #local pos = pos - 1.25; #local i = i + 1; #end } #end #declare valores = array[3]; #declare valores[0] = 16; #declare valores[1] = 9; #declare valores[2] = 3; #declare roleta = seed(417); #macro abaco(m,n,valores,prob) #local i = 0; #local pos = -m; union{ object{base scale} #while(i < m) object{fileira(n,valores[i],prob) translate } #local pos = pos + 1.75; #local i = i + 1; #end } #end #include "eixos.inc" // Aqui está a cena, finalmente: union{ object{abaco(3,5,valores,0.10) rotate <0,90,0> translate <0,0,-5>} object{abaco(3,6,valores,0.60) rotate <0,90,0> translate <0,0,5>} } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 15.0; #declare dir_camera = < 50.00, 0.00, 20.00 >; #declare dist_camera = 20.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)