// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2023-09-19 19:16:48 by stolfilocal // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 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 } } // ====================================================================== // PEÇAS #declare peao = union { box{ <-0.5, -0.5, 0>, <0.5, 0.5, 0.3> } cone{ <0, 0, 0.3>, 0.5 <0, 0, 2>, 0 } sphere { <0, 0, 2>, 0.5 } texture { tx_plastico } } #declare rainha = union { box{ <-0.5, -0.5, 0>, <0.5, 0.5, 0.3> } box{ <-0.3, -0.3, 0.3>, <0.3, 0.3, 2.> } cone{ <0, 0, 2>, 1 <0, 0, 2.5>, 0 } texture { tx_plastico } } // ====================================================================== // TABULEIRO #declare DISK_THICKNESS = 0.3; #declare LANE_SPACING = 0.5; #declare LANE_SIZE = 1; #declare nfileiras = 7; #declare ncasas = 14; #declare step = 2 * pi / ncasas; // Devia estar dentro da macro! #macro calculate_x(M_VALUE, N_VALUE) #local resultado = (M_VALUE - 1) * LANE_SIZE + M_VALUE * LANE_SPACING + LANE_SIZE / 2; resultado * cos(2 * pi * N_VALUE / ncasas) #end #macro calculate_y(M_VALUE, N_VALUE) #local resultado = (M_VALUE - 1) * LANE_SIZE + M_VALUE * LANE_SPACING + LANE_SIZE / 2; resultado * sin(2 * pi * N_VALUE / ncasas) #end #declare calculate_n = function(x, y) { div(atan2(y, x), step) } #declare checker_odd = function(x, y, z, parity) { mod(int(calculate_n(x, y)), 2) = parity } #declare tx_checker = texture{ pigment{ function { checker_odd(x, y, z, 0) } } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #macro disk(Y_VALUE) cylinder { <0, 0, 0>, <0, 0, DISK_THICKNESS>, (LANE_SIZE + LANE_SPACING) * Y_VALUE texture { tx_checker } } #end #macro cutter(Y_VALUE) cylinder { <0, 0, -DISK_THICKNESS * 3>, <0, 0, DISK_THICKNESS * 3>, LANE_SIZE * (Y_VALUE - 1) + LANE_SPACING * Y_VALUE texture { tx_checker } } #end #macro disk_lane(Y_VALUE) difference { disk(Y_VALUE) cutter(Y_VALUE) } #end #macro tabuleiro(M_VALUE) union { #declare CURRENT_M = 1; #while (CURRENT_M <= M_VALUE) disk_lane(CURRENT_M) #declare CURRENT_M = CURRENT_M + 1; #end } #end #macro spawn(M_VALUE, N_VALUE) union { #declare CURRENT_M = 1; #while (CURRENT_M <= M_VALUE) #declare CURRENT_N = 1; #while (CURRENT_N <= N_VALUE) #if (CURRENT_M = 1 & mod(CURRENT_N, 2) = 0) object {peao translate } #end #if (CURRENT_M = M_VALUE & mod(CURRENT_N, 2) = 1) object {rainha translate } #end #declare CURRENT_N = CURRENT_N + 1; #end #declare CURRENT_M = CURRENT_M + 1; #end } #end // ====================================================================== #declare raio = 2.000; #include "eixos.inc" union{ object{ eixos(3.00) } object {tabuleiro(nfileiras) translate <0, 0, -DISK_THICKNESS>} spawn(nfileiras, ncasas) } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 2.0*nfileiras; #declare dir_camera = < 14.00, 7.00, 8.00 >; #declare dist_camera = 7*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)