// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2023-09-21 18:36:25 by stolfilocal // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.75, 0.85 > } #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_plastico2 = texture{ pigment{ color rgb < 0.80, 0.80, 0.10 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_fosca_vermelha = texture{ pigment{ color rgb < 1.00, 0.10, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_fosca_verde = texture{ pigment{ color rgb < 0.10, 1.00, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_chao = texture{ pigment{ color rgb < 0.50, 0.50, 0.50 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_wall = texture{ pigment{ color rgb < 0.70, 0.90, 0.70 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0.10, 0.10, 0.10 >, color rgb < 1.00, 0.97, 0.90 > } finish{ diffuse 0.9 ambient 0.1 } scale 0.1 } // ====================================================================== #declare pawn = union{ cylinder{<0,0,0>, <0,0,0.1>, 0.2} cone{<0,0,0.1>, 0.14, <0,0,0.8>, 0.02} sphere{<0,0,0.8>, 0.1 } } #declare queen = union{ cone{<0,0,0>, 0.3, <0,0,0.2>, 0.2} cone{<0,0,0.2>, 0.14, <0,0,1.2>, 0.02} sphere{<0,0,1.2>, 0.1} difference { cone{<0,0,1.3>,0.1,<0,0,1.4>,0.15} union{ box{<1,0.05,1.35>,<-1,-0.05,1.5>} box{<0.05,1,1.35>,<-0.05,-1,1.5>} } } } #declare casa = cylinder {<0,0,0>,<0,0,0.01>,0.4} #declare disco = cylinder{<0,0,0>,<0,0,-0.2>,3} #macro playingBoard (ndiscos, ncasas) // discos must be at least 2 and casas must be at least 3 #local discos = ndiscos; #local casas = ncasas; union{ #if(discos > 1 & casas > 2) // Make the playing pieces //Case odd number #if(mod(casas, 2) = 1) // Top pieces #declare currentcasas = casas - 1; object{queen texture{tx_fosca_verde} translate <0,2.5,discos*2>} #while (currentcasas > 0) object{pawn texture{tx_fosca_verde} translate<0,2.5,discos*2> rotate <0, 0, currentcasas / casas * 360>} #declare currentcasas = currentcasas - 2; #end // Bottom pieces #declare currentcasas = casas - 1; object{queen texture{tx_fosca_vermelha} translate <0,2.5,2>} #while (currentcasas > 0) object{pawn texture{tx_fosca_vermelha} translate<0,2.5,2> rotate <0, 0, currentcasas / casas * 360>} #declare currentcasas = currentcasas - 2; #end // Case even number (extra queen) #else // Top pieces #declare currentcasas = casas - 2; object{queen texture{tx_fosca_verde} translate <0,2.5,discos*2>} object{queen texture{tx_fosca_verde} translate <0,-2.5,discos*2>} #while (currentcasas > 0) object{pawn texture{tx_fosca_verde} translate<0,2.5,discos*2> rotate <0, 0, currentcasas / casas * 360>} #declare currentcasas = currentcasas - 2; #end // Bottom pieces #declare currentcasas = casas - 2; object{queen texture{tx_fosca_vermelha} translate <0,2.5,2>} object{queen texture{tx_fosca_vermelha} translate <0,-2.5,2>} #while (currentcasas > 0) object{pawn texture{tx_fosca_vermelha} translate<0,2.5,2> rotate <0, 0, currentcasas / casas * 360>} #declare currentcasas = currentcasas - 2; #end #end // Make the board (discs) #while(discos > 0) object{disco texture{tx_plastico} translate <0,0,discos*2>} #declare currentcasas = casas; #while(currentcasas > 0) object{casa texture{tx_plastico2} translate <0,2.5,discos*2> rotate <0, 0, currentcasas / casas * 360> } #declare currentcasas = currentcasas - 1; #end #declare discos = discos -1; #end #end } #end #include "eixos.inc" #local ndiscos = 7; #local ncasas = 16; object{playingBoard(ndiscos, ncasas)} union{ object{ eixos(1.7) } object{pawn texture{tx_fosca_verde} } scale 3 translate <0, -9, 1.0*ndiscos>} union{ object{ eixos(1.7) } object{queen texture{tx_fosca_vermelha} } scale 3 translate <0, +9, 1.0*ndiscos> } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.0*ndiscos + 1 >; #declare raio_cena = 2.1*ndiscos + 2; #declare dir_camera = < 10.00, 5.00, 7.00 >; #declare dist_camera = 7*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)