// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2022-01-06 10:11:44 by stolfi // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_verde = texture{ pigment{ color rgb < 0.15, 1.00, 0.15 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_vermelho = texture{ pigment{ color rgb < 1.00, 0.10, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_azul = texture{ pigment{ color rgb < 0.10, 0.10, 1.00 > } finish{ diffuse 0.9 ambient 0.1 } } // ====================================================================== // DESCRIÇÃO DA CENA // MACROS QUE CONSTITUEM OS OBJETOS DA CENA #macro param_interpola1(tt, tt0, tt1, vv0, vv1) #local rr = (tt - tt0)/(tt1 - tt0); #local vv = (1 - rr)*vv0 + rr*vv1; vv #end #macro param_interpolaBezier(tt, tt0,tt3, vv0,vv1,vv2,vv3) #local vv01 = param_interpola1(tt, tt0,tt3, vv0,vv1); #local vv12 = param_interpola1(tt, tt0,tt3, vv1,vv2); #local vv23 = param_interpola1(tt, tt0,tt3, vv2,vv3); #local vv012 = param_interpola1(tt, tt0,tt3, vv01,vv12); #local vv123 = param_interpola1(tt, tt0,tt3, vv12,vv23); #local vv0123 = param_interpola1(tt, tt0,tt3, vv012,vv123); vv0123 #end #macro bola(posicao, raio) sphere{ posicao, raio texture {tx_verde} } #end #macro segtentaculo(M, P0, R0, P1, R1, P2, R2, P3, R3) #local i = 0; #local tt0 = 0; #local tt1 = M; union{ #while(i < M) #local posicao = param_interpolaBezier(i, tt0, tt1, P0, P1, P2, P3); #local raio = param_interpolaBezier(i, tt0, tt1, R0, R1, R2, R3); object { bola(posicao, raio) } #local i = i + 1; #end } #end #macro tentaculo(M, N, PP, RR) #local j = 0; union{ #while(j < N) object { segtentaculo(M, PP[j][0], RR[j][0], PP[j][1], RR[j][1], PP[j][2], RR[j][2], PP[j][3], RR[j][3]) } #local j = j + 1; #end } #end #macro tentaculo_animado(M, tt) # local N = 5; # local K = 4; # local QPP = array[K][4][N][4]; # local QRR = array[K][4][N][4]; //quadro 0 #local QPP[0][1][0][0] = <70, 0, 20>; #local QPP[0][1][0][1] = <120, 0, 40>; #local QPP[0][1][0][2] = <150, 0, 60>; #local QPP[0][1][1][1] = <170, 0, 80>; #local QPP[0][1][1][2] = <210, 0, 100>; #local QPP[0][1][2][1] = <250, 0, 120>; #local QPP[0][1][2][2] = <280, 0, 160>; #local QPP[0][1][3][1] = <290, 0, 180>; #local QPP[0][1][3][2] = <310, 0, 210>; #local QPP[0][1][4][1] = <350, 0, 290>; #local QPP[0][1][4][2] = <370, 0, 300>; #local QPP[0][1][4][3] = <400, 0, 310>; #local QRR[0][1][0][0] = 8.00; // 30; #local QRR[0][1][0][1] = 7.00; // 29; #local QRR[0][1][0][2] = 6.50; // 27; #local QRR[0][1][1][1] = 6.25; // 25; #local QRR[0][1][1][2] = 6.00; // 25; #local QRR[0][1][2][1] = 6.00; // 20; #local QRR[0][1][2][2] = 6.00; // 20; #local QRR[0][1][3][1] = 6.00; // 20; #local QRR[0][1][3][2] = 6.00; // 20; #local QRR[0][1][4][1] = 6.00; // 14; #local QRR[0][1][4][2] = 6.00; // 7; #local QRR[0][1][4][3] = 6.00; // 5; //quadro 1 #local QPP[0][2][0][0] = <70, 0, 20>; #local QPP[0][2][0][1] = <120, 0, 40>; #local QPP[0][2][0][2] = <150, 0, 60>; #local QPP[0][2][1][1] = <170, 0, 80>; #local QPP[0][2][1][2] = <210, 0, 100>; #local QPP[0][2][2][1] = <250, 0, 120>; #local QPP[0][2][2][2] = <280, 0, 160>; #local QPP[0][2][3][1] = <290, 0, 180>; #local QPP[0][2][3][2] = <310, 0, 210>; #local QPP[0][2][4][1] = <350, 0, 290>; #local QPP[0][2][4][2] = <370, 0, 310>; #local QPP[0][2][4][3] = <400, 0, 290>; #local QRR[0][2][0][0] = 8.00; // 30; #local QRR[0][2][0][1] = 7.00; // 29; #local QRR[0][2][0][2] = 6.50; // 27; #local QRR[0][2][1][1] = 6.25; // 25; #local QRR[0][2][1][2] = 6.00; // 25; #local QRR[0][2][2][1] = 6.00; // 20; #local QRR[0][2][2][2] = 6.00; // 20; #local QRR[0][2][3][1] = 6.00; // 20; #local QRR[0][2][3][2] = 6.00; // 20; #local QRR[0][2][4][1] = 6.00; // 14; #local QRR[0][2][4][2] = 6.00; // 7; #local QRR[0][2][4][3] = 6.00; // 5; //quadro 2 #local QPP[1][1][0][0] = <70, 0, 20>; #local QPP[1][1][0][1] = <120, 0, 40>; #local QPP[1][1][0][2] = <150, 0, 60>; #local QPP[1][1][1][1] = <170, 0, 80>; #local QPP[1][1][1][2] = <210, 0, 100>; #local QPP[1][1][2][1] = <250, 0, 120>; #local QPP[1][1][2][2] = <280, 0, 160>; #local QPP[1][1][3][1] = <290, 0, 160>; #local QPP[1][1][3][2] = <310, 0, 140>; #local QPP[1][1][4][1] = <350, 0, 120>; #local QPP[1][1][4][2] = <370, 0, 100>; #local QPP[1][1][4][3] = <400, 0, 80>; #local QRR[1][1][0][0] = 8.00; // 30; #local QRR[1][1][0][1] = 7.00; // 29; #local QRR[1][1][0][2] = 6.50; // 27; #local QRR[1][1][1][1] = 6.25; // 25; #local QRR[1][1][1][2] = 6.00; // 25; #local QRR[1][1][2][1] = 6.00; // 20; #local QRR[1][1][2][2] = 6.00; // 20; #local QRR[1][1][3][1] = 6.00; // 20; #local QRR[1][1][3][2] = 6.00; // 20; #local QRR[1][1][4][1] = 6.00; // 14; #local QRR[1][1][4][2] = 6.00; // 7; #local QRR[1][1][4][3] = 6.00; // 5; //quadro 3 #local QPP[1][2][0][0] = <70, 0, 20>; #local QPP[1][2][0][1] = <120, 0, 40>; #local QPP[1][2][0][2] = <150, 0, 60>; #local QPP[1][2][1][1] = <170, 0, 80>; #local QPP[1][2][1][2] = <200, 80, 140>; #local QPP[1][2][2][1] = <220, 160, 160>; #local QPP[1][2][2][2] = <240, 160, 200>; #local QPP[1][2][3][1] = <230, 80, 190>; #local QPP[1][2][3][2] = <310, 0, 210>; #local QPP[1][2][4][1] = <350, 0, 290>; #local QPP[1][2][4][2] = <370, 0, 300>; #local QPP[1][2][4][3] = <400, 0, 310>; #local QRR[1][2][0][0] = 8.00; // 30; #local QRR[1][2][0][1] = 7.00; // 29; #local QRR[1][2][0][2] = 6.50; // 27; #local QRR[1][2][1][1] = 6.25; // 25; #local QRR[1][2][1][2] = 6.00; // 25; #local QRR[1][2][2][1] = 6.00; // 20; #local QRR[1][2][2][2] = 6.00; // 20; #local QRR[1][2][3][1] = 6.00; // 20; #local QRR[1][2][3][2] = 6.00; // 20; #local QRR[1][2][4][1] = 6.00; // 14; #local QRR[1][2][4][2] = 6.00; // 7; #local QRR[1][2][4][3] = 6.00; // 5; #local QPP[0][1][0][3] = (QPP[0][1][0][2] + QPP[0][1][1][1])/2; #local QPP[0][1][1][0] = QPP[0][1][0][3]; #local QPP[0][1][1][3] = (QPP[0][1][1][2] + QPP[0][1][2][1])/2; #local QPP[0][1][2][0] = QPP[0][1][1][3]; #local QPP[0][1][2][3] = (QPP[0][1][2][2] + QPP[0][1][3][1])/2; #local QPP[0][1][3][0] = QPP[0][1][2][3]; #local QPP[0][1][3][3] = (QPP[0][1][3][2] + QPP[0][1][4][1])/2; #local QPP[0][1][4][0] = QPP[0][1][3][3]; #local QRR[0][1][0][3] = (QRR[0][1][0][2] + QRR[0][1][1][1])/2; #local QRR[0][1][1][0] = (QRR[0][1][0][2] + QRR[0][1][1][1])/2; #local QRR[0][1][1][3] = (QRR[0][1][1][2] + QRR[0][1][2][1])/2; #local QRR[0][1][2][0] = (QRR[0][1][1][2] + QRR[0][1][2][1])/2; #local QRR[0][1][2][3] = (QRR[0][1][2][2] + QRR[0][1][3][1])/2; #local QRR[0][1][3][0] = (QRR[0][1][2][2] + QRR[0][1][3][1])/2; #local QRR[0][1][3][3] = (QRR[0][1][3][2] + QRR[0][1][4][1])/2; #local QRR[0][1][4][0] = (QRR[0][1][3][2] + QRR[0][1][4][1])/2; #local QPP[0][2][0][3] = (QPP[0][2][0][2] + QPP[0][2][1][1])/2; #local QPP[0][2][1][0] = QPP[0][2][0][3]; #local QPP[0][2][1][3] = (QPP[0][2][1][2] + QPP[0][2][2][1])/2; #local QPP[0][2][2][0] = QPP[0][2][1][3]; #local QPP[0][2][2][3] = (QPP[0][2][2][2] + QPP[0][2][3][1])/2; #local QPP[0][2][3][0] = QPP[0][2][2][3]; #local QPP[0][2][3][3] = (QPP[0][2][3][2] + QPP[0][2][4][1])/2; #local QPP[0][2][4][0] = QPP[0][2][3][3]; #local QRR[0][2][0][3] = (QRR[0][2][0][2] + QRR[0][2][1][1])/2; #local QRR[0][2][1][0] = (QRR[0][2][0][2] + QRR[0][2][1][1])/2; #local QRR[0][2][1][3] = (QRR[0][2][1][2] + QRR[0][2][2][1])/2; #local QRR[0][2][2][0] = (QRR[0][2][1][2] + QRR[0][2][2][1])/2; #local QRR[0][2][2][3] = (QRR[0][2][2][2] + QRR[0][2][3][1])/2; #local QRR[0][2][3][0] = (QRR[0][2][2][2] + QRR[0][2][3][1])/2; #local QRR[0][2][3][3] = (QRR[0][2][3][2] + QRR[0][2][4][1])/2; #local QRR[0][2][4][0] = (QRR[0][2][3][2] + QRR[0][2][4][1])/2; #local QPP[1][1][0][3] = (QPP[1][1][0][2] + QPP[1][1][1][1])/2; #local QPP[1][1][1][0] = QPP[1][1][0][3]; #local QPP[1][1][1][3] = (QPP[1][1][1][2] + QPP[1][1][2][1])/2; #local QPP[1][1][2][0] = QPP[1][1][1][3]; #local QPP[1][1][2][3] = (QPP[1][1][2][2] + QPP[1][1][3][1])/2; #local QPP[1][1][3][0] = QPP[1][1][2][3]; #local QPP[1][1][3][3] = (QPP[1][1][3][2] + QPP[1][1][4][1])/2; #local QPP[1][1][4][0] = QPP[1][1][3][3]; #local QRR[1][1][0][3] = (QRR[1][1][0][2] + QRR[1][1][1][1])/2; #local QRR[1][1][1][0] = (QRR[1][1][0][2] + QRR[1][1][1][1])/2; #local QRR[1][1][1][3] = (QRR[1][1][1][2] + QRR[1][1][2][1])/2; #local QRR[1][1][2][0] = (QRR[1][1][1][2] + QRR[1][1][2][1])/2; #local QRR[1][1][2][3] = (QRR[1][1][2][2] + QRR[1][1][3][1])/2; #local QRR[1][1][3][0] = (QRR[1][1][2][2] + QRR[1][1][3][1])/2; #local QRR[1][1][3][3] = (QRR[1][1][3][2] + QRR[1][1][4][1])/2; #local QRR[1][1][4][0] = (QRR[1][1][3][2] + QRR[1][1][4][1])/2; #local QPP[1][2][0][3] = (QPP[1][2][0][2] + QPP[1][2][1][1])/2; #local QPP[1][2][1][0] = QPP[1][2][0][3]; #local QPP[1][2][1][3] = (QPP[1][2][1][2] + QPP[1][2][2][1])/2; #local QPP[1][2][2][0] = QPP[1][2][1][3]; #local QPP[1][2][2][3] = (QPP[1][2][2][2] + QPP[1][2][3][1])/2; #local QPP[1][2][3][0] = QPP[1][2][2][3]; #local QPP[1][2][3][3] = (QPP[1][2][3][2] + QPP[1][2][4][1])/2; #local QPP[1][2][4][0] = QPP[1][2][3][3]; #local QRR[1][2][0][3] = (QRR[1][2][0][2] + QRR[1][2][1][1])/2; #local QRR[1][2][1][0] = (QRR[1][2][0][2] + QRR[1][2][1][1])/2; #local QRR[1][2][1][3] = (QRR[1][2][1][2] + QRR[1][2][2][1])/2; #local QRR[1][2][2][0] = (QRR[1][2][1][2] + QRR[1][2][2][1])/2; #local QRR[1][2][2][3] = (QRR[1][2][2][2] + QRR[1][2][3][1])/2; #local QRR[1][2][3][0] = (QRR[1][2][2][2] + QRR[1][2][3][1])/2; #local QRR[1][2][3][3] = (QRR[1][2][3][2] + QRR[1][2][4][1])/2; #local QRR[1][2][4][0] = (QRR[1][2][3][2] + QRR[1][2][4][1])/2; // Prof: #debug concat("!! Prof\n") #local PP = array[N][4] #local RR = array[N][4] #local j = 0; #while (j < N) #local i = 0; #while (i < 4) #debug concat("!! [j][i] = [", str(j,0,0), "][", str(i,0,0), "]\n") #debug concat("!! QPP[0][2][j][i] = ", str(QPP[0][2][j][i].x,0,3), "\n") #debug concat("!! QPP[1][2][j][i] = ", str(QPP[1][2][j][i].x,0,3), "\n") #local PP[j][i] = param_interpola1(tt, 0, 1, QPP[0][2][j][i], QPP[1][2][j][i]); #debug concat("!! QRR[0][2][j][i] = ", str(QRR[0][2][j][i],0,3), "\n") #local RR[j][i] = param_interpola1(tt, 0, 1, QRR[0][2][j][i], QRR[1][2][j][i]); #local i = i + 1; #end #local j = j + 1; #end #local tent = object { tentaculo(M, N, PP, RR) } // End Prof. tent #end #include "eixos.inc" #local M = 70; union{ // object{eixos(100)} // object{ tentaculo_teste(M) } object{ tentaculo_animado(M, clock) } } #include "camlight.inc" #declare centro_cena = < 235, 0, 165>; #declare raio_cena = 400; #declare dir_camera = < -40, -20, 10 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)