// ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.5, 0.5, 0.5 > } #declare branco = texture{ pigment{ color rgb < 1 1 1 > } finish{ diffuse 0.9 ambient 0.1 } } #declare preto = texture{ pigment{ color rgb < 0 0 0 > } finish{ diffuse 0.9 ambient 0.1 } } // ====================================================================== // DESCRI��O DA CENA #declare cubo = box{ <-1,-1,-1>,<1,1,1> texture{branco} } #declare esfera = sphere{ <0,0,0>,1 texture{branco} } #declare cone_invertido = cone{ <0,0,0.0>,0,<0,0,3>,1 texture{branco} } #declare cone_normal= cone{ <0,0,1>,1,<0,0,3>,0 texture{branco} } #declare base= cylinder{ <0,0,0>,<0,0,0.5>,1.5 texture{preto} } #declare esfera= sphere{ <0,0,0>,1 texture{branco} } #declare mini_esfera= sphere{ <0,0,0>,0.7 texture{branco} } #declare esferinha= sphere{ <0,0,0>,0.1 texture{preto} } #declare cano= cylinder{ <0,0,0>,<0.5,0,0>,0.1 texture{preto} } #macro tanque1() union{ object{esfera} object{cano translate<1,0,0> } } #end #macro pontas1(origem) array[1]{origem+<1.5,0,0>} #end #macro tanque2() union{ object{esfera} object{cone_invertido} object{cano translate<1,0,0> } object{cano translate<-1.5,0,0>} } #end #macro pontas2(origem) array[2]{origem+<1.5,0,0>,origem+<-1.5,0,0>} #end #macro tanque3() union{ object{esfera} object{mini_esfera translate<0,0,1.5>} object{cano translate<1,0,0> } object{cano translate<-1.5,0,0>} object{cano translate<0,0.7,1.5> rotate 90*z} } #end #macro pontas3(origem) array[3]{origem+<1.5,0,0>,origem+<-1.5,0,0>,origem+<0,1.2,1.5>} #end #macro tanque4() union{ object{cubo} object{cone_normal} object{cano translate<1,0,0>} object{cano translate<1,0,0> rotate 90*z} object{cano translate<1,0,0> rotate 180*z} object{cano translate<1,0,0> rotate 270*z} } #end // #macro pontas4(origem) // array[4]{origem} // #end #macro interpola1(T,t0,v0,t1,v1) #local ss=(T-t0)/(t1-t0); #local vv=(1-ss)*v0+ss*v1; vv #end #macro interpola3(T,ta,tb,v0,v1,v2,v3) #local v01=interpola1(T,ta,v0,tb,v1); #local v12=interpola1(T,ta,v1,tb,v2); #local v23=interpola1(T,ta,v2,tb,v3); #local v012=interpola1(T,ta,v01,tb,v12); #local v123=interpola1(T,ta,v12,tb,v23); #local v0123=interpola1(T,ta,v012,tb,v123); v0123 #end #macro testa_interpola1(obj,t0,v0,t1,v1,n) object{obj translate} #local cont=1; #while(cont} #local cont=cont+1; #end object{obj translate} #end #macro testa_interpola3_multi(obj,N,Pini,P1,P2,Pfim,n) #local t0=0; #local t1=N; object{obj translate Pini} #local cont=1; #while(cont; #local deg[i]=0; #end #for(j,0,ne-1) #local deg[org[j]]=deg[org[j]]+1; #local deg[dst[j]]=deg[dst[j]]+1; #end #for(k,0,nv-1) #if(deg[k]=1) object{tanque1() translate pos[k]} #elseif(deg[k]=2) object{tanque2() translate pos[k]} #elseif(deg[k]=3) object{tanque3() translate pos[k]} #elseif(deg[k]=4) object{tanque4() translate pos[k]} #end #end #end #macro conector(na,Pini,Tini,Pfin,Tfin,D,nb) #local P1=array[na]; #local P2=array[na]; #local roletar=seed(10567); #local P1[0]=Tini; #local P2[0]=; #for(i,1,na-2) #local P1[i]=; #local P2[i]=; #end #local P2[na-1]=Tfin; #local P1[na-1]=; testa_interpola3_multi(esferinha,na,Pini,P1,P2,Pfin,na*nb) #end #declare roleta=seed(34567); #declare ponta11=<1.5,0,0>; #declare ponta12=<-1.5,0,0>; #declare ponta13=<0,0,3.5>; #declare ponta21=<1.5,0,0>; #declare ponta22=<0,1.5,0>; #declare ponta23=<0,0,3.5>; #declare ponta31=<1.5,0,0>; #declare ponta32=<-1.5,0,0>; #declare ponta33=<0,0,2.7>; #include "eixos.inc" // Aqui est� a cena, finalmente: #local org=array[7] {5,4,1,1,1,2,3}; #local dst=array[7] {4,1,0,2,3,3,0}; gera_grafo(6,7,org,dst,20,0,0) conector(5,<0,0,0>,<10,0,0>,<20,20,20>,<10,20,20>,20,10000) // testa_interpola3(esferinha,0+ponta11.x,20+ponta11.x,ponta11,ponta11+<5,0,0>,ponta12+<20,20,0>-<5,0,0>,ponta12+<20,20,0>,10000) // object{tanque2()} // object{tanque2() translate<20,20,0>} // #local Pini=<0,0,0>; // #local n=3; // #local P1=array[n]; // #local P2=array[n]; // #local P1[0]=<0,10,0>; // #local P2[0]=<10,10,0>; // #local P1[1]=<10,20,0>; // #local P2[1]=<20,20,0>; // #local P1[2]=<20,30,0>; // #local P2[2]=<30,30,0>; // #local Pfim=<30,40,0>; // #local Pini2=<-10,10,0>; // #local n2=1; // #local P12=array[n2]; // #local P22=array[n2]; // #local P12[0]=<-10,20,0>; // #local P22[0]=<0,20,0>; // #local Pfim2=<0,30,0>; // testa_interpola3_multi(esferinha,n,Pini,P1,P2,Pfim,100000) // testa_interpola3_multi(esferinha,n2,Pini2,P12,P22,Pfim2,100000) #include "camlight.inc" #declare centro_cena = < 0 ,0, -3>; #declare raio_cena = 30; #declare dir_camera = < 2, 2, 2>; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)