// Last edited on 2001-01-29 00:49:35 by stolfi // Alterada a posição da câmera e luzes [J.Stolfi] #include "colors.inc" #include "textures.inc" #declare ALTURA_DA_JANELA = 30.0; #declare LARGURA_DA_JANELA = 25.0; #declare ESPESSURA_DA_JANELA = 1.0; #declare ESPESSURA_DO_VIDRO = 0.5; #declare BORDA_DA_JANELA = 3.0; #declare ALTURA_DA_PORTA = 80.0; #declare LARGURA_DA_PORTA = 25.0; #declare ESPESSURA_DA_PORTA = 2.0; #declare JANELAS_POR_SALA = 8.0; // apenas as superiores, primeiro andar #declare DIST_PISO_JANELA = 25.0; #declare ESPACAMENTO = 10.0; // distancia entre janelas, porta-janela, porta-fim da sala... #declare ESPESSURA_DA_PAREDE = 5.0; #declare DIST_TETO_JANELA = 15.0; #declare SALAS_ESQUERDA = 2.0; #declare SALAS_DIREITA = 4.0; #declare ESPESSURA_BARRA = 2.0; #declare LARGURA_BARRA = 4.0; #declare ALTURA_BARRA = 30.0; #declare RAIO_GRADE = LARGURA_BARRA/2; #declare SALAS_PRIMEIRO_ANDAR = SALAS_ESQUERDA + SALAS_DIREITA; #declare LARGURA_DA_SALA = 2*LARGURA_DA_PORTA + JANELAS_POR_SALA * LARGURA_DA_JANELA + 5 * ESPACAMENTO; #declare ALTURA_DA_SALA = DIST_PISO_JANELA + 2*ALTURA_DA_JANELA + DIST_TETO_JANELA; #declare PROFUNDIDADE_SALA = (LARGURA_DA_SALA + ALTURA_DA_SALA)/2; #declare PROFUNDIDADE_SALA2 = 2*PROFUNDIDADE_SALA; // profundidade das salas do segundo andar #declare LARGURA_CORREDOR = LARGURA_DA_SALA/2; #declare LARGURA_CORREDOR_LATERAL = LARGURA_DA_SALA/6; #declare LARGURA_BANHEIRO = 0; // por enquanto // LARGURA_DA_SALA * 2/3; #declare LARGURA_PB = SALAS_PRIMEIRO_ANDAR * LARGURA_DA_SALA + LARGURA_CORREDOR + 2*(LARGURA_CORREDOR_LATERAL + LARGURA_BANHEIRO); #declare PROFUNDIDADE_PB = 2*PROFUNDIDADE_SALA + 2*LARGURA_CORREDOR_LATERAL; #declare ALTURA_BLOCO = 15; #declare LARGURA_GRADE = LARGURA_DA_SALA/4; #declare LARGURA_CORTE = 7*LARGURA_DA_JANELA; #declare PROFUNDIDADE_CORTE = PROFUNDIDADE_SALA2/7; #declare TEXTURA_JANELA = texture { pigment { color blue 0.5 } } #declare TEXTURA_PORTA = texture { pigment { color rgb <0,0.5,0.5> } } #declare TEXTURA_PAREDE = texture { pigment { White } } #declare TEXTURA_BLOCO = texture { pigment { Brown } } // Como criar concreto????? #declare TEXTURA_BARRA = texture { pigment { Blue/2 } } #declare TEXTURA_VIDRO = texture { pigment { color rgbf <0.4, 0.4, 0.45, 0.9> } normal { bumps , 0.2 scale <0.5, 0.5, 5.0> } finish { ambient 0.1 diffuse 0.2 phong 1.0 phong_size 50.0 specular 0.9 roughness 0.06 reflection 0.15 } } // ======================================================================================================== // ====================================================================== // Begin new camera [J.Stolfi] #declare centro_da_cena = < 0.50 * LARGURA_PB, 4.00 * ALTURA_DA_SALA, 0.15 * LARGURA_PB >; #declare raio_da_cena = 0.26 * LARGURA_PB; #declare direcao_da_camera = vnormalize( < 2, 0.25, -3 > ); #declare dist_da_camera = 6.0 * raio_da_cena; #declare pos_da_camera = centro_da_cena + dist_da_camera * direcao_da_camera; camera { location pos_da_camera right < -0.64, 0.00, 0.00 > up < 0.00, 0.48, 0.00 > sky y look_at centro_da_cena } // End new camera [J.Stolfi] // ====================================================================== // ====================================================================== // Begin original camera // camera { // [original] // // location // [original] // look_at // [original] // } // [original] // End original camera // ====================================================================== // ======================================================================================================== // ====================================================================== // Begin new lights [J.Stolfi] #declare dist_da_luz = 20.0 * raio_da_cena; #declare direcao_da_luz_1 = vnormalize( < 2, 1.5, -5 > ); light_source { centro_da_cena + dist_da_luz * direcao_da_luz_1 color rgb 1.60 * <1,1,1> } #declare direcao_da_luz_2 = vnormalize( < 2, 1.5, 5 > ); light_source { centro_da_cena + dist_da_luz * direcao_da_luz_2 color rgb 0.75 * <1,1,1> } #declare direcao_da_luz_3 = vnormalize( < -5, 1.5, -3 > ); light_source { centro_da_cena + dist_da_luz * direcao_da_luz_3 color rgb 0.25 * <1,1,1> } #declare direcao_da_luz_4 = vnormalize( < -1, 10, -2 > ); light_source { centro_da_cena + dist_da_luz * direcao_da_luz_4 color rgb 0.35 * <1,1,1> } // Corpo de prova: // sphere{ centro_da_cena, 0.30 * LARGURA_PB // texture{ pigment{ color White } finish {diffuse 1.0 ambient 0.0 } } // } // End new lights [J.Stolfi] // ====================================================================== // ====================================================================== // Begin original lights // #declare i = SALAS_DIREITA + SALAS_ESQUERDA; // #while (i > 0) // light_source { // // color White // } // light_source { // // color White/2 // } // light_source { // // color White/2 // } // #declare i = i - 1; // #end // End original lights // ====================================================================== // ======================================================================================================== // ceu de fundo sky_sphere { pigment { gradient y color_map { [0.000 0.002 color rgb <0.0, 0.0, 0.5> color rgb <0.0, 0.0, 0.6>] [0.002 0.200 color rgb <0.0, 0.0, 0.4> color rgb <0.0, 0.0, 0.7>] } scale 2 translate -1 } pigment { bozo turbulence 0.4 octaves 6 omega 0.7 lambda 2 color_map { [0.0 0.1 color rgb <0.85, 0.85, 0.85> color rgb <0.75, 0.75, 0.75>] [0.1 0.5 color rgb <0.75, 0.75, 0.75> color rgbt <1, 1, 1, 1>] [0.5 1.0 color rgbt <1, 1, 1, 1> color rgbt <1, 1, 1, 1>] } scale <0.2, 0.5, 0.2> } rotate -135*x } // ======================================================================================================== // janela com canto inferior esquerdo frontal em <0,0,0> #declare janela = union { difference { // caixa azul que vai ser cortada para colocacao do vidro box { <0,0,0> texture { TEXTURA_JANELA } } // caixa para cortar a janela box { } } // vidro box { texture { TEXTURA_VIDRO } } } // ======================================================================================================== // porta com canto inferior esquerdo frontal em <0,0,0> #declare porta = box { <0,0,0> texture { TEXTURA_PORTA } } // ======================================================================================================== // sala de aula do primeiro andar com canto inferior esquerdo frontal em <0,0,0> #declare sala_de_aula = union { difference { // bloco de concreto onde sera moldada a sala box { <0,0,0> texture { TEXTURA_PAREDE } } // corte para deixar a sala oca box { ESPESSURA_DA_PAREDE * <1,-1,1> - ESPESSURA_DA_PAREDE * <1,-1,1> texture { TEXTURA_PAREDE } } // cortes para colocação de portas box { texture { TEXTURA_PAREDE } } box { texture { TEXTURA_PAREDE } } // cortes para colocacao de janelas #declare i = 0; #while (i < JANELAS_POR_SALA) #if (i < JANELAS_POR_SALA/2) #declare SOMA = 0; #else #declare SOMA = ESPACAMENTO; #end box { texture { TEXTURA_PAREDE } } // janelas inferiores #if (mod(i,JANELAS_POR_SALA-1) = 0) box { texture { TEXTURA_PAREDE } } #end #declare i = i + 1; #end } // colocação das portas object { porta translate ESPACAMENTO*x } object { porta translate (LARGURA_DA_SALA-ESPACAMENTO-LARGURA_DA_PORTA)*x } //colocação das janelas #declare i = 0; #while (i < JANELAS_POR_SALA) #if (i < JANELAS_POR_SALA/2) #declare SOMA = 0; #else #declare SOMA = ESPACAMENTO; #end object { janela translate } // janelas inferiores #if (mod(i,JANELAS_POR_SALA-1) = 0) object { janela translate } #end #declare i = i + 1; #end } // ======================================================================================================== // primeiro andar (apenas salas de aula da frente), com canto em <0,0,0> #declare salas_frente_primeiro_andar = union { #declare i = 0; #while (i < SALAS_ESQUERDA + SALAS_DIREITA) #if (i < SALAS_ESQUERDA) #declare SOMA = 0; #else #declare SOMA = LARGURA_CORREDOR; #end object { sala_de_aula translate (i*LARGURA_DA_SALA + SOMA)*x } #declare i = i + 1; #end } // ======================================================================================================== // primeiro andar (salas de aula do fundo), com canto em <0,0,0> #declare salas_fundo_primeiro_andar = object { salas_frente_primeiro_andar scale <1,1,-1> translate PROFUNDIDADE_SALA*z } // ======================================================================================================== // primeiro andar (todas as salas), com canto em <0,0,0> #declare salas_primeiro_andar = union { object { salas_frente_primeiro_andar } object { salas_fundo_primeiro_andar translate PROFUNDIDADE_SALA*z } } // ======================================================================================================== // definicao do bloco de separacao entre andares, com canto em <0,0,0> #declare bloco_separador = box { <0,0,0> texture { TEXTURA_BLOCO } } // ======================================================================================================== // sala de aula do segundo andar com canto inferior esquerdo frontal em <0,0,0> #declare sala_de_aula_segundo_andar = union { difference { // bloco de concreto onde sera moldada a sala box { <0,0,0> texture { TEXTURA_PAREDE } } // corte para deixar a sala oca box { ESPESSURA_DA_PAREDE * <1,-1,1> - ESPESSURA_DA_PAREDE * <1,-1,1> texture { TEXTURA_PAREDE } } // cortes para colocação de portas box { texture { TEXTURA_PAREDE } } box { texture { TEXTURA_PAREDE } } // corte - regiao central box { texture { TEXTURA_PAREDE } } } // colocacao de um bloco fechando o corte na regiao central difference { box { texture { TEXTURA_PAREDE } } box { texture { TEXTURA_PAREDE } } } // colocação das portas object { porta translate ESPACAMENTO*x } object { porta translate (LARGURA_DA_SALA-ESPACAMENTO-LARGURA_DA_PORTA)*x } } // ======================================================================================================== // segundo andar (apenas salas de aula), com canto em <0,0,0> #declare salas_segundo_andar = union { #declare i = 0; #while (i < SALAS_ESQUERDA + SALAS_DIREITA) #if (i < SALAS_ESQUERDA) #declare SOMA = 0; #else #declare SOMA = LARGURA_CORREDOR; #end object { sala_de_aula_segundo_andar translate (i*LARGURA_DA_SALA + SOMA)*x } #declare i = i + 1; #end } // ======================================================================================================== // Construcao de uma das grades de "protecao" do PB, com canto inferior esquerdo frontal em <0,0,0> #declare grade = merge { box { <0,0,0> texture { TEXTURA_BARRA } } box { <0,0,0> texture { TEXTURA_BARRA } translate LARGURA_GRADE*x } cylinder { <0, ALTURA_BARRA, LARGURA_BARRA/2> RAIO_GRADE texture { TEXTURA_BARRA } } // barras internas #declare i = 0; #while (i < 3) box { <0,5,LARGURA_BARRA/2-ESPESSURA_BARRA/2> texture { TEXTURA_BARRA } translate y*i*7.5 } #declare i = i + 1; #end } // ======================================================================================================== #declare primeiro_e_segundo_andares = union { object { bloco_separador } object { salas_primeiro_andar translate } /* Colocacao das grades de protecao no corredor - primeiro andar*/ #declare i = 0; #while (i < 26) object { grade translate } #declare i = i + 1; #end object { bloco_separador translate <0,ALTURA_BLOCO+ALTURA_DA_SALA,0> } object { salas_segundo_andar translate } /* Colocacao das grades de protecao no corredor - segundo andar*/ #declare i = 0; #while (i < 26) object { grade translate } #declare i = i + 1; #end object { bloco_separador translate <0,ALTURA_BLOCO*2+ALTURA_DA_SALA*2,0> } } // ======================================================================================================== #declare pb = union { object { primeiro_e_segundo_andares translate ESPESSURA_DA_PAREDE*x + ALTURA_DA_SALA*2*y } } object { pb } //object { grade } // piso plane { y 0 pigment { White } } // ========================================================================================================