// Exercício de Laboratório 7 // Aluno: Gustavo Fernandez da Costa // RA: 169296 // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.8, 0.7, 0.5 > } #declare tx_corda = texture{ pigment{ color rgb < 0.3, 0.2, 0.2 > } finish{ diffuse 0.9 ambient 0.1 } } // ====================================================================== // DESCRICAO DA CENA #include "eixos.inc" #include "pontos.inc" #macro interpola_linear(T,T0,T1,P0,P1) (P0+(T0+T/(T1-T0))*(P1-P0)) #end //P0 é o ponto de origem indo em direção ao ponto P1, e //P1 é o ponto de destino vindo da direção de P2 #macro interpola_3d(T, T0, T1, P0, P00, P1, P11) (P0*pow((1-(T0+T/(T1-T0))),3) + P00*3*(T0+T/(T1-T0))*pow((1-(T0+T/(T1-T0))),2) + 3*P11*pow((T0+T/(T1-T0)),2)*(1-(T0+T/(T1-T0))) + pow((T0+T/(T1-T0)),3)*P1) #end #macro arco(A0, A1, A2, A3, T0, T1) union{ #local T = T0; #while (T<=T1) object{ sphere { interpola_3d(T,T0,T1,A0, A1, A3, A2), 0.2 texture {tx_corda}}} #local T = T+1; #end } #end #macro make_no(P, N, M) union{ #local I = 0; #while (I < N) arco(P[I][0],P[I][1],P[I][2],P[I][3],0,M) #local I = I + 1; #end } #end #macro interpola_linear_matriz(P,Q,N,C0,C1,CC) #local R = array[N][4]; #for (I,0,N-1,1) #for (J,0,3,1) #local R[I][J] = <0,0,0>; #end #end #local I = 0; #while (I < N) #local K = 0; #while (K < 4) #local R[I][K] = interpola_linear(CC,C0,C1,P[I][K],Q[I][K]); #local K = K + 1; #end #local I = I + 1; #end R #end #macro get_no (I, N, P) #local R = array[N][4]; #for (J, 0, N-1,1) #for (K, 0, 3, 1) #local R[J][K] = P[I][J][K]; #end #end R #end // CENA #macro busca_tempo (clk, NK, TK) #local K = 0; #local find = 0; #while ((K <= NK) & (find = 0)) #if ((TK[K] <= clk) & (TK[K+1] > clk)) #local find = 1; #else #local K = K + 1; #end #end K #end union{ #declare P = pontos(); #declare TK = array[6]; #declare TK[0] = 0; #declare TK[1] = 0.2; #declare TK[2] = 0.4; #declare TK[3] = 0.6; #declare TK[4] = 0.8; #declare TK[5] = 1; #declare I = busca_tempo (clock, 6, TK); #declare P1 = get_no(I, 3, P); #declare P2 = get_no(I+1, 3, P); #local R = interpola_linear_matriz(P1,P2,3,0,TK[I+1],clock); make_no(R,3,1000) } #include "camlight.inc" #declare centro_cena = < -4.00, 5.00, 0.00 >; #declare raio_cena = 12; //#declare dir_camera = < 1.0, 1.0, 1.0 >; //#declare dir_camera = < 1, 0.2, 0.2 >; #declare dir_camera = < 1, 1, 0 >; //#declare dir_camera = < 1.0, 0, 1.0 >; //#declare dir_camera = < 0.0, -1.0, 1.0 >; #declare dist_camera = 4*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)