background{ color rgb < 0.75, 0.80, 0.85 > }

#declare peca_preta = 
  texture{
    pigment{ color rgb < 0.30, 0.30, 0.30 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }

#declare peca_branca = 
texture{
pigment{ color rgb < 0.90, 0.90, 0.90 > }
finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
}
#declare hiperpeao = 
    union {
        cone {
            <0,0,0>, 0.075
            <0,0.075,0>, 0
        }
        sphere {
            <0,0.15,0>, 0.075
        }
        box{
            <-0.075,0.225,-0.075>,
            <0.075,.375,0.075>
        }
    }

#declare hiperdama = 
    union {
        cone {
            <0,0.05,0>, 0.075
            <0,0.2,0>, 0
        }
        sphere {
            <0,0.275,0>, 0.075
        }
        cylinder{
            <0,0,0>,
            <0,0.05,00>,
            0.15
        }
    }

#macro tabuleiro(m,n) //n par
    #declare raioCamada=0.5;
    #declare camada=1;
    #while (camada <= m)
        #declare par=mod(camada,2);
        #declare raio=camada*raioCamada;
        #declare altura=(m-camada+1)*0.01;
        #declare rot=par*180;
        object {
            cylinder {
                <0,-altura,0>,
                <0,altura,0>,
                raio
                texture {
                    pigment {
                        radial color_map{[0.5 color rgb <0,0,0>][0.5 color rgb <1,1,1>]}
                        frequency n
                    }
                }
                rotate z*rot
            }
        }
        
        #if(camada>1)
            #declare peca=0;
            #declare anguloDif = 2*3.141592/(2*n);
            #while (peca<(2*n))
                #declare rpeca = raio-(raioCamada/2);
                #declare angulo = peca*anguloDif +anguloDif/2;
                #declare posx = rpeca*cos(angulo);
                #declare posz = rpeca*sin(angulo);
                object{
                    #if (par<1)
                        hiperpeao
                    #else
                        hiperdama
                    #end
                        translate <posx,altura,posz>
                        texture {
                        #if(peca>=n)
                            peca_preta
                        #else
                            peca_branca
                        #end
                        }
                }
                #declare peca=peca+1;
            #end
        #end
        #declare camada=camada+1;
    #end
#end

#declare fileiras = 7;
#declare casas = 6;

union {
    tabuleiro(fileiras, casas)
    rotate 90*y
}

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 0>;
#declare raio_cena = 0.7*fileiras;
#declare dir_camera = < 0, 1, -1 >;
#declare dist_camera = 5*raio_cena;
#declare intens_luz = 1.20;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)