// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2020-09-30 19:57:13 by jstolfi // ====================================================================== // CORES E TEXTURAS //#include "textures.inc" background{ color rgb < 240/255, 243/255, 246/255 > } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0.47, 0.37, 0.47 >, color rgb < 1.00, 0.97, 0.90 > } finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } #declare tx_preto = texture{ pigment{ color rgb < 0.17, 0.17, 0.17 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } scale 1.0 } #declare tx_roxo = texture{ pigment{ color rgb < 0.60, 0.1, 0.60 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } scale 2.0 } #declare tx_vermelho = texture{ pigment{ color rgb < 0.80, 0.0, 0.17 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } scale 2.0 } #declare tx_azul = texture{ pigment{ color rgb < 0.17, 0.80, 0.80 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } scale 2.0 } // ====================================================================== #declare chao = box{ <-20,-20,-1>, <+20,+20,0> } #macro retalho_barra(p,q,r,txg) // Cria uma barra de {p} para {q} com raio {r}; omite se {p} muito perto de {q}. #if ((r > 0) & (vlength(p - q) > 0.01*r)) cylinder{p,q,r texture{txg}} #end #end #macro retalho (p,rad,txg,txr,xmin,ymin,xmax,ymax) // Cria um retalho de Bezier com pontos de controle {p[0..3,0..3]} // com textura {txr}.. // Se {rad} é positivo, também mostra a grade de pontos de controle, // com barras de raio {rad} e textura {txg}. union{ #local r = rad; // Raio das varetas. #local R = 2*r; // Raio das bolas. // O retalho propriamente dito: bicubic_patch{ type 1 u_steps 3 v_steps 3 uv_vectors , , , p[3][0],p[3][1],p[3][2],p[3][3], p[2][0],p[2][1],p[2][2],p[2][3], p[1][0],p[1][1],p[1][2],p[1][3], p[0][0],p[0][1],p[0][2],p[0][3] texture {txr} } #if (rad > 0) // Bolas da grade de controle sphere{p[0][0],R texture{txg}} sphere{p[0][1],R texture{txg}} sphere{p[0][2],R texture{txg}} sphere{p[0][3],R texture{txg}} sphere{p[1][0],R texture{txg}} sphere{p[1][1],R texture{txg}} sphere{p[1][2],R texture{txg}} sphere{p[1][3],R texture{txg}} sphere{p[2][0],R texture{txg}} sphere{p[2][1],R texture{txg}} sphere{p[2][2],R texture{txg}} sphere{p[2][3],R texture{txg}} sphere{p[3][0],R texture{txg}} sphere{p[3][1],R texture{txg}} sphere{p[3][2],R texture{txg}} sphere{p[3][3],R texture{txg}} // Barras da grade de controle retalho_barra(p[0][0],p[0][1],r,txg) retalho_barra(p[0][1],p[0][2],r,txg) retalho_barra(p[0][2],p[0][3],r,txg) retalho_barra(p[0][0],p[1][0],r,txg) retalho_barra(p[0][1],p[1][1],r,txg) retalho_barra(p[0][2],p[1][2],r,txg) retalho_barra(p[0][3],p[1][3],r,txg) retalho_barra(p[1][0],p[1][1],r,txg) retalho_barra(p[1][1],p[1][2],r,txg) retalho_barra(p[1][2],p[1][3],r,txg) retalho_barra(p[1][0],p[2][0],r,txg) retalho_barra(p[1][1],p[2][1],r,txg) retalho_barra(p[1][2],p[2][2],r,txg) retalho_barra(p[1][3],p[2][3],r,txg) retalho_barra(p[2][0],p[2][1],r,txg) retalho_barra(p[2][1],p[2][2],r,txg) retalho_barra(p[2][2],p[2][3],r,txg) retalho_barra(p[2][0],p[3][0],r,txg) retalho_barra(p[2][1],p[3][1],r,txg) retalho_barra(p[2][2],p[3][2],r,txg) retalho_barra(p[2][3],p[3][3],r,txg) retalho_barra(p[3][0],p[3][1],r,txg) retalho_barra(p[3][1],p[3][2],r,txg) retalho_barra(p[3][2],p[3][3],r,txg) #end } #end // ====================================================================== // DESCRI��O DA CENA // arrays #macro empacota(NP, a0, a1, a2, a3, a4, a5) #local P = array[NP]; #local P[0] = a0; #local P[1] = a1; #local P[2] = a2; #local P[3] = a3; #local P[4] = a4; #local P[5] = a5; P #end // ----- #macro poltrona(pos, rot, altura, largura, inclinacao) //--------------------------------- // azul - corpo #local A = array[4][4]; #local A[0][0] = <0, 0.2, 0.5>; #local A[0][1] = <0.5, 0.2, 0.5>; #local A[0][2] = <1, 0.2, 0.5>; #local A[0][3] = <1.5, 0.2, 0.5>; #local A[1][0] = <0, 0.5, 0.8>; #local A[1][1] = <0.5, 0.5, 0.8>; #local A[1][2] = <1, 0.5, 0.8>; #local A[1][3] = <1.5, 0.5, 0.8>; #local A[2][0] = <0, 0.25, 1>; #local A[2][1] = <0.5, 0.25, 1>; #local A[2][2] = <1, 0.25, 1>; #local A[2][3] = <1.5, 0.25, 1>; #local A[3][0] = <0, 1, 1.25>; #local A[3][1] = <0.5, 1, 1.25>; #local A[3][2] = <1, 1, 1.25>; #local A[3][3] = <1.5, 1, 1.25>; //--------------------------------- //--------------------------------- // cabeca - roxo 1 #local R1 = array[4][4]; #local R1[0][0] = A[3][0]; #local R1[0][1] = A[3][1]; #local R1[0][2] = A[3][2]; #local R1[0][3] = A[3][3]; //-- calcula #local R1[1][0] = 2*R1[0][0] - A[2][0]; #local R1[1][1] = 2*R1[0][1] - A[2][1]; #local R1[1][2] = 2*R1[0][2] - A[2][2]; #local R1[1][3] = 2*R1[0][3] - A[2][3]; #local R1[2][0] = <0, 0.7, 2.2>; #local R1[2][1] = <0.5, 0.7, 2.2>; #local R1[2][2] = <1, 0.7, 2.2>; #local R1[2][3] = <1.5, 0.7, 2.2>; #local R1[3][0] = <0, 2, 2.2>; #local R1[3][1] = <0.5, 2, 2.2>; #local R1[3][2] = <1, 2, 2.2>; #local R1[3][3] = <1.5, 2, 2.2>; //--------------------------------- //--------------------------------- // pés - roxo 2 #local R2 = array[4][4]; #local R2[0][0] = <0, -1.5, 0.4>; #local R2[0][1] = <0.5, -1.5, 0.4>; #local R2[0][2] = <1, -1.5, 0.4>; #local R2[0][3] = <1.5, -1.5, 0.4>; #local R2[1][0] = <0, -0.5, 0.8>; #local R2[1][1] = <0.5, -0.5, 0.8>; #local R2[1][2] = <1, -0.5, 0.8>; #local R2[1][3] = <1.5, -0.5, 0.8>; #local R2[3][0] = A[0][0]; #local R2[3][1] = A[0][1]; #local R2[3][2] = A[0][2]; #local R2[3][3] = A[0][3]; //-- calcula #local R2[2][0] = 2*R2[3][0] - A[1][0]; #local R2[2][1] = 2*R2[3][1] - A[1][1]; #local R2[2][2] = 2*R2[3][2] - A[1][2]; #local R2[2][3] = 2*R2[3][3] - A[1][3]; //--------------------------------- //--------------------------------- // braço - vermelho #local V = array[4][4]; #local V[0][0] = A[0][0]; #local V[0][1] = 2*V[0][0] - A[0][1]; #local V[0][2] = <-1, 0.2, 0.8>; #local V[0][3] = <-1, 0.2, 0.5>; #local V[1][0] = A[1][0]; #local V[1][1] = 2*V[1][0] - A[1][1]; #local V[1][2] = <-1, 0.5, 0.8>; #local V[1][3] = <-1, 0.5, 0.5>; #local V[2][0] = A[2][0]; #local V[2][1] = 2*V[2][0] - A[2][1]; #local V[2][2] = <-1, 0.25, 0.8>; #local V[2][3] = <-1, 0.25, 0.5>; #local V[3][0] = A[3][0]; #local V[3][1] = 2*V[3][0] - A[3][1]; #local V[3][2] = <-1, 1, 1.25>; #local V[3][3] = <-1, 1, 1.25>; //--------------------------------- //--------------------------------- // suporte da cadeira #local topo = (A[0][0] + A[0][3] + A[3][0] + A[3][3])/4; #local base1 = topo + <0, 0.5, -0.5>; #local suporte1 = cylinder{ topo, base1, 0.15 texture{ tx_roxo } }; #local ligacao = sphere{ base1, 0.30 texture{ tx_azul }} #local base2 = base1 + <0, 0, -1.5>; #local suporte2 = cylinder{ base1, base2, 0.15 texture{ tx_roxo } }; #local roda = sphere{ base2, 0.60 texture{ tx_vermelho }} //--------------------------------- object{ union{ object{ union{ object{ retalho(A, 0, tx_preto, tx_azul, 5, 5,5, 5) } object{ retalho(R1, 0, tx_preto, tx_roxo, 5, 5,5, 5) } object{ retalho(R2, 0, tx_preto, tx_roxo, 5, 5,5, 5) } object{ retalho(V, 0, tx_preto, tx_vermelho, 5, 5,5, 5) } suporte1 ligacao suporte2 roda } translate <-A[0][0].x, -A[0][0].y, -A[0][0].z> translate pos } object{ union{ object{ retalho(A, 0.0, tx_preto, tx_azul, 5, 5,5, 5) } object{ retalho(R1, 0.0, tx_preto, tx_roxo, 5, 5,5, 5) } object{ retalho(R2, 0.0, tx_preto, tx_roxo, 5, 5,5, 5) } object{ retalho(V, 0.0, tx_preto, tx_vermelho, 5, 5,5, 5) } } translate <-A[0][0].x, -A[0][0].y, -A[0][0].z> translate <-A[0][3].x, 0, 0> // scale <-1, 0, 0> // translate pos } } rotate rot + scale } #end #include "eixos.inc" union{ // object{ eixos(3.00) } object{ chao translate < 0,0,-5 > texture{ tx_xadrez } } // Poltronas #local pos1 = <-4, 0, 0>; #local rot1 = <0, 0, 90>; poltrona(pos1, rot1, 1, 1, -10) #local pos2 = <3, 0, 0>; #local rot2 = <0, 0, 0>; poltrona(pos2, rot2, 1.25, 0.75, 0) light_source { <0, 10, -3> color rgb < 200/255, 42/255, 222/255 > spotlight radius 100 falloff 30 tightness 10 point_at <0, 0, 0> } } #include "camlight.inc" #declare centro_cena = < 0.0, 0.50, 0.50 >; #declare raio_cena = 1.3*8.0; #declare dir_camera = < 1.70, -1.0, 1.00 >; #declare dist_camera = raio_cena; #declare intens_luz = 0.80; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)