// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2003-09-04 15:25:26 by stolfi // ====================================================================== // CÂMERA camera { // location <0.0, 0.4, 2.0 > // Posição do observador. // location <0.0, 4.5, -1.0 > // Posição do observador. location <-1.5, +1.1, -1.2 > // Posição do observador. right -1*x // Largura RELATIVA da imagem. up 0.75*y // Altura RELATIVA da imagem. sky y // Qual direção é "para cima"? // look_at <0.0, 0, 0 > // Para onde a câmera está apontando. look_at <-0.3, +0.65, 0 > // Para onde a câmera está apontando. } // Nota: os parâmetros "right" e "up" devem ter a mesma proporção // que os parâmetros ${WIDTH} e ${HEIGHT} no Makefile. // ====================================================================== // FONTES DE LUZ light_source { < -2.0, +1.5, -2.5 > // Posição da lâmpada. color rgb 2.0 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } light_source { < -2.0, +1.5, +2.5 > // Posição da lâmpada. color rgb 2.0 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } light_source { < +2.0, +1.5, 0 > // Posição da lâmpada. color rgb 2.0 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } // ====================================================================== // DESCRIÇÃO DA CENA background{ color rgb < 0.20, 0.15, 0.05 > } #declare tinta_braco = texture { pigment { color rgb < 0.60, 0.60, 0.60 > } finish { diffuse 0.05 specular 0.20 roughness 0.05 ambient 0.05 reflection color rgb < 0.60, 0.60, 0.60 > } } #declare tinta_robo = texture { pigment { color rgb < 0.20, 0.20, 0.60 > } } #declare tinta_delinquente = texture { pigment { color rgb < 0.10, 0.40, 0.15 > } } #declare tinta_rosto_delinquente = texture { pigment { color rgb < 0.10, 0.10, 0.10 > } } #declare tinta_rosto_robo = texture { pigment { color rgb < 0.30, 0.30, 0.05 > } } #declare cor_caixa_rotacao = texture { pigment { color rgb < 0.05, 0.05, 0.10 > } } // Momentos do movimento: #declare t0 = 0; #declare t1 = 0.5; #declare t2 = 1.0; #if (clock >= t1) // Ângulos iniciais e finais do movimento planejado. #declare angGarraIni = 40; #declare angGarraFim = 40; #declare angRotGarraIni = 90; #declare angRotGarraFim = 90; #declare angCotoveloIni = -85; #declare angCotoveloFim = -85; #declare angVerOmbroIni = 0; #declare angVerOmbroFim = -70; #declare angHorOmbroIni = -50; #declare angHorOmbroFim = -50; #declare angDelIni = 0; #declare angDelFim = -70; // Ângulo de abertura da garra, de 0 a 90º. 0 é a garra fechada. #declare angGarra = angGarraIni + (clock - t1)/(t2-t1) * (angGarraFim - angGarraIni); // Ângulo de rotação entre 2º e 3º braços. Entre -90º e +90º #declare angRotGarra = angRotGarraIni + (clock - t1)/(t2-t1) * (angRotGarraFim - angRotGarraIni); // Ângulo de articulação entre 1º e 2º braços. O Eixo é vertical e a rotação na // horizontal quando o 1º braço não está rotacionado em relação ao robô. #declare angCotovelo = angCotoveloIni + (clock - t1)/(t2-t1) * (angCotoveloFim - angCotoveloIni); // Ângulo de articulação entre o troco e o 1º braço. O eixo é horizontal e o // movimento é vertical. #declare angVerOmbro = angVerOmbroIni + (clock - t1)/(t2-t1) * (angVerOmbroFim - angVerOmbroIni); // Ângulo de articulação entre o troco e o 1º braço. O eixo é vertical e o // movimento é horizontal. #declare angHorOmbro = angHorOmbroIni + (clock - t1)/(t2-t1) * (angHorOmbroFim - angHorOmbroIni); // Ângulo do delinquente em relação ao eixo x. #declare angDel = angDelIni + (clock - t1)/(t2-t1) * (angDelFim - angDelIni); #else #if (clock >= t0) // Ângulos iniciais e finais do movimento planejado. #declare angGarraIni = 5; #declare angGarraFim = 40; #declare angRotGarraIni = 0; #declare angRotGarraFim = 90; #declare angCotoveloIni = -20; #declare angCotoveloFim = -85; #declare angVerOmbroIni = 0; #declare angVerOmbroFim = 0; #declare angHorOmbroIni = -20; #declare angHorOmbroFim = -50; #declare angDelIni = 0; #declare angDelFim = 0; // Ângulo de abertura da garra, de 0 a 90º. 0 é a garra fechada. #declare angGarra = angGarraIni + (clock - t0)/(t1-t0)* (angGarraFim - angGarraIni); // Ângulo de rotação entre 2º e 3º braços. Entre -90º e +90º #declare angRotGarra = angRotGarraIni + (clock - t0)/(t1-t0) * (angRotGarraFim - angRotGarraIni); // Ângulo de articulação entre 1º e 2º braços. O Eixo é vertical e a rotação na // horizontal quando o 1º braço não está rotacionado em relação ao robô. #declare angCotovelo = angCotoveloIni + (clock - t0)/(t1-t0) * (angCotoveloFim - angCotoveloIni); // Ângulo de articulação entre o troco e o 1º braço. O eixo é horizontal e o // movimento é vertical. #declare angVerOmbro = angVerOmbroIni + (clock - t0)/(t1-t0) * (angVerOmbroFim - angVerOmbroIni); // Ângulo de articulação entre o troco e o 1º braço. O eixo é vertical e o // movimento é horizontal. #declare angHorOmbro = angHorOmbroIni + (clock - t0)/(t1-t0) * (angHorOmbroFim - angHorOmbroIni); // Ângulo do delinquente em relação ao eixo x. #declare angDel = angDelIni + (clock - t0)/(t1-t0) * (angDelFim - angDelIni); #end #end #declare pinca = object { difference { cylinder { <0,0,-0.05>, <0,0,+0.05>, 0.06 } cylinder { <0,0,-0.06>, <0,0,+0.06>, 0.05 } box { <-0.07, -0.07, -0.06>, <+0.07,0,+0.06> } } translate <+0.06,0,0> texture { tinta_braco } } #declare garra = union { object { pinca rotate angGarra*z } object { pinca rotate 180*x rotate -angGarra*z } } #declare braco3 = union { cone { <0,0,0>, 0.04, <+0.20,0,0>, 0.025 texture { tinta_braco } } box { <0,-0.04,-0.005>, <+0.20,+0.04,+0.005> texture { cor_caixa_rotacao }} object { garra translate <+0.21,0,0> } } #declare braco2 = union { cylinder { <0,0,0>, <+0.20,0,0>, 0.04 texture { tinta_braco } } cylinder { <+0.19,0,0>, <+0.22,0,0> 0.03 texture { tinta_braco } } object { braco3 rotate angRotGarra*x translate <+0.21,0,0> } } #declare braco1 = union { sphere { <0,0,0>, 0.06 texture { tinta_braco } } cylinder { <0,0,0>, <+0.30,0,0>, 0.04 texture { tinta_braco } } sphere { <+0.30,0,0>, 0.06 texture { tinta_braco } } object { braco2 rotate angCotovelo*y translate <+0.30,0,0> } } #declare altura_ombro = 0.45; #declare robo = union { box { <-0.20,0,-0.15>, <+0.20,+0.60,+0.15> texture { tinta_robo } } object { braco1 rotate angHorOmbro*y rotate angVerOmbro*x translate <+0.23,altura_ombro,0> } object { braco1 rotate angHorOmbro*y rotate angVerOmbro*x scale <-1,1,1> translate <-0.23,altura_ombro,0>} object { sphere { <0,+0.65, 0>, 0.12 texture { tinta_rosto_robo } } } } #declare delinquente = union { object { cylinder { <0,0,+0.65>, <0,+0.6,+0.65>, 0.13 texture { tinta_delinquente } } } object { sphere { <0,+0.64,+0.65>, 0.10 texture { tinta_rosto_delinquente }} } translate <0,-altura_ombro,0> rotate angDel*x translate <0,altura_ombro,0> } #declare chao = plane { y, 0 texture { pigment { checker <0.15, 0.05, 0>, <0.15, 0.15, 0.15> } finish {ambient 0.01 diffuse 0.8} scale 2 } } // A cena union { object { robo } object { delinquente } object { chao } }