/* MC930 - 2o. sem 2000 - Prof. Jorge Stolfi * * Trabalho Prático: "Interior do Bandejão" * * by Paulo Eduardo Ferreira de Castro - RA 971379 * */ #include "textures.inc" /* largura -> eixo Z comprimento -> eixo X altura -> eixo Y */ /* mesas */ #declare largMesa = 1; #declare compMesa = 3.5; #declare espMesa = .04; /* espessura */ #declare altMesa = .8; /* distancia da mesa ao chao */ #declare entreMesasX = 1.2; #declare entreMesasZ = 1.2; #declare entreMesasJuntas = .1; #declare ladoBanco = .35; /* quadrado */ #declare espBanco = .03; #declare altBanco = .44; #declare entreBancos = compMesa/5; #declare raioSuporte = .04; #declare numMesasX = 12; #declare numMesasZ = 6; #declare distMesa_ParedeX = 1; #declare distMesa_ParedeZ = 5; #declare compTodasMesas = numMesasX * (compMesa+entreMesasX/2+entreMesasJuntas/2) - entreMesasX; #declare largTodasMesas = numMesasZ * (largMesa+entreMesasZ) - entreMesasZ; /* bandejao total */ #declare compBandejao = compTodasMesas + 2 * distMesa_ParedeX; #declare largBandejao1 = largTodasMesas + distMesa_ParedeZ + 2; #declare largBandejaoTotal = largBandejao1 + 10; #declare altBandejao = 6; /* nao inclui o teto */ /* bilheteria (casa de venda de tickets) */ #declare compBilheteria=6; #declare largBilheteria=6; #declare altBilheteria=altBandejao; #declare compHallRoletas=4; #declare largHallRoletas=6; /* casa da nutricionista (administracao) */ #declare compCasaNutrDentro=3; // interior do bandejao #declare compCasaNutrFora=6; // exterior do bandejao #declare largCasaNutr=6; /* casa de lavagem de bandejas (LB) */ #declare compLB = 14; #declare largLB = 6; #declare altLB = 5; #declare raioColunaLB = 1; /* rampa */ #declare compRampa = 8; #declare largRampa = 1.5; #declare altRampa = 3; #declare hipotenusaRampa=sqrt(pow(altRampa,2) + pow(compRampa,2))/2; #declare altMurinho = 1; #declare espMurinho = .2; #declare espPiso = .3; /* espessura do piso da rampa e plataforma */ #declare compHallRampas = 3; /* piso que une as duas rampas, no alto */ #declare compRampaCompleta = 2 * compRampa + compHallRampas; #declare posXRampaCompleta=compBandejao - compRampaCompleta/2 - compCasaNutrDentro - 1.2*largRampa; #declare posZRampaCompleta=largBandejao1 + 3.5*largRampa; /* janelas */ #declare largHasteFixaHorizontal=.03; #declare largHasteFixaVertical=.15; #declare espHasteFixa=.02; #declare largHasteMovel=.01; #declare espHasteMovel=.005; #declare numJanelasGrandesY=3; #declare numJanelasPequenasY=2; #declare numJanelasZ=10; #declare altTodasJanelas=altBandejao; #declare espJanela=.003; #declare largJanela=(largBandejao1 - largHasteFixaVertical*(numJanelasZ+1)) / numJanelasZ; #declare altJanelaPequena = (altTodasJanelas - largHasteFixaHorizontal * (numJanelasPequenasY + numJanelasGrandesY + 1)) / (numJanelasPequenasY + 2*numJanelasGrandesY); #declare altJanelaGrande = 2*altJanelaPequena; #declare numJanelasX=(compBandejao-largHasteFixaVertical)/(largJanela+largHasteFixaVertical); /* paredes */ #declare altParede = 2*(altJanelaGrande+largHasteFixaHorizontal); #declare espParede = .25; /* teto */ #declare ladoBasePiramide = 1.5; #declare altPiramide = 1.5; /* cores */ #declare corChao=<.6, .6, .6>; #declare corParede=<1, 1, 1>; #declare corMurinho=<1, .8, .7>; #declare corPisoRampa=corMurinho; #declare corBilheteria=corMurinho; #declare corCasaNutr=<.8, 1, .8>; #declare corCasaLB=<.8, .8, 1>; #declare corHaste=<.3, .3, .3>; #declare corTeto=<.7, .8, .5>; /* ---------------------------------------------------- */ /* teto */ /* #declare piramide= prism { conic_sweep linear_spline 0, // height 1 1, // height 2 5, // the number of points making up the shape... <4,4>,<-4,4>,<-4,-4>,<4,-4>,<4,4> pigment { color rgb corTeto } } */ /* mesas */ #declare mesa = box { <-compMesa/2, altMesa, -largMesa/2>, pigment { color rgb < 1, 1, .8 > } } #declare banco = box { <-ladoBanco/2, altBanco, -ladoBanco/2>, pigment { color rgb < 1, 1, .8 > } } #declare suporteBanco = union { cylinder { <0, raioSuporte, 0>, <0, altBanco, 0>, raioSuporte } cylinder { <0, raioSuporte, 0>, <0, altMesa, largMesa/2 + ladoBanco/2>, raioSuporte } sphere { <0, raioSuporte, 0>, raioSuporte } pigment { color rgb < .976, .686, .4 > } } #declare bancoComSuporte1 = union { object { banco } object { suporteBanco } } #declare bancoComSuporte2 = union { object { banco } object { suporteBanco scale <1, 1, -1> } } #declare mesaCompleta = union { object { mesa } object { bancoComSuporte1 translate <-compMesa/2 + entreBancos, 0, -largMesa/2 - ladoBanco/2> } object { bancoComSuporte1 translate <-compMesa/2 + 2*entreBancos, 0, -largMesa/2 - ladoBanco/2> } object { bancoComSuporte1 translate <-compMesa/2 + 3*entreBancos, 0, -largMesa/2 - ladoBanco/2> } object { bancoComSuporte1 translate <-compMesa/2 + 4*entreBancos, 0, -largMesa/2 - ladoBanco/2> } object { bancoComSuporte2 translate <-compMesa/2 + entreBancos, 0, largMesa/2 + ladoBanco/2> } object { bancoComSuporte2 translate <-compMesa/2 + 2*entreBancos, 0, largMesa/2 + ladoBanco/2> } object { bancoComSuporte2 translate <-compMesa/2 + 3*entreBancos, 0, largMesa/2 + ladoBanco/2> } object { bancoComSuporte2 translate <-compMesa/2 + 4*entreBancos, 0, largMesa/2 + ladoBanco/2> } } /* casa de lavagem de bandejas (LB) */ #declare distLB_ParedeX = 6; #declare casaLavaBandeja = union { cylinder { <-(compLB/2-raioColunaLB), 0, -(largLB/2-raioColunaLB)>, <-(compLB/2-1), altLB, -(largLB/2-raioColunaLB)>, raioColunaLB } cylinder { <-(compLB/2-raioColunaLB), 0, (largLB/2-raioColunaLB)>, <-(compLB/2-raioColunaLB), altLB, (largLB/2-raioColunaLB)>, raioColunaLB } cylinder { <(compLB/2-raioColunaLB), 0, (largLB/2-raioColunaLB)>, <(compLB/2-raioColunaLB), altLB, (largLB/2-raioColunaLB)>, raioColunaLB } cylinder { <(compLB/2-raioColunaLB), 0, -(largLB/2-raioColunaLB)>, <(compLB/2-raioColunaLB), altLB, -(largLB/2-raioColunaLB)>, raioColunaLB } box { <-(compLB/2-raioColunaLB), 0, -largLB/2>, <(compLB/2-raioColunaLB), altLB, largLB/2> } box { <-compLB/2, 0, -(largLB/2-raioColunaLB)>, <-(compLB/2-raioColunaLB), altLB, (largLB/2-raioColunaLB)> } box { , } pigment { color rgb corCasaLB } } /* rampa */ #declare meioCilindro= difference { cylinder { <0, 0, -.5>, <0, 0, .5>, 1 } box { <-2, -2, -2>, <2, 0, 2> } } #declare rampa = difference { union { box { // piso <-hipotenusaRampa, -espPiso/2, -largRampa/2>, scale <1.1, 1, 1> pigment { color rgb corPisoRampa } } box { // murinho <-hipotenusaRampa, espPiso/2, -largRampa/2>, pigment { color rgb corMurinho } } box { // murinho <-hipotenusaRampa, espPiso/2, largRampa/2-espMurinho>, pigment { color rgb corMurinho } } object { meioCilindro scale translate pigment { color rgb corMurinho } } object { meioCilindro scale translate pigment { color rgb corMurinho } } rotate <0, 0, degrees(atan2(altRampa, compRampa))> } box { <-compRampa/2, -altRampa, -largRampa>, <-compRampa, 0, largRampa> pigment { color rgb corMurinho } } box { , pigment { color rgb corMurinho } } } #declare rampaCompleta = union { box { <-compHallRampas/2, -espPiso/2, -largRampa/2>, translate <0, altRampa, 0> pigment { color rgb corPisoRampa } } object { rampa scale <-1, 1, 1> translate } object { rampa translate <-compRampa/2 - compHallRampas/2, altRampa/2, 0> } // pigment { color rgb corParede } } /* Bilheteria */ #declare bilheteria= box { <-espParede/2, 0, largBandejao1>, pigment { color corBilheteria } } #declare plataformaSuperior= union { box { // piso para o lado da bilheteria (mais largo) , pigment { color rgb corPisoRampa } } box { // piso para o lado da rampa , pigment { color rgb corPisoRampa } } box { // murinho ao longo de x para o lado das mesas , pigment { color rgb corMurinho } } box { // murinho ao longo de x para o lado das rampas , pigment { color rgb corMurinho } } box { // murinho ao longo de z para o lado das rampas , pigment { color rgb corMurinho } } } /* Casa da Nutricionista (CN) */ #declare casaNutr = box { , pigment { color rgb corCasaNutr } } /* paredes */ #declare paredes = union { box { <-espParede/2, 0, -espParede/2>, pigment { color rgb corParede } } box { <-espParede/2, 0, -espParede/2>, pigment { color rgb corParede } } box { , //texture { NBglass } pigment { color rgb 1 } } } #declare janelaGrande= union { box { <-espJanela/2, -altJanelaGrande/2, -largJanela/2>, //texture { NBglass } pigment { color rgb 1 } } box { <-espHasteMovel/2, -altJanelaGrande/2, -largJanela/2>, //texture { Aluminum } pigment { color rgb corHaste } } box { <-espHasteMovel/2, -altJanelaGrande/2, largJanela/2-largHasteMovel>, //texture { Aluminum } pigment { color rgb corHaste } } box { <-espHasteMovel/2, altJanelaGrande/2-largHasteMovel, -largJanela/2>, //texture { Aluminum } pigment { color rgb corHaste } } box { <-espHasteMovel/2, -altJanelaGrande/2, -largJanela/2>, //texture { Aluminum } pigment { color rgb corHaste } } } #declare janelaPequena= union { box { <-espJanela/2, -altJanelaPequena/2, -largJanela/2>, //texture { NBglass } pigment { color rgb 1 } } box { <-espHasteMovel/2, -altJanelaPequena/2, -largJanela/2>, //texture { Aluminum } pigment { color rgb corHaste } } box { <-espHasteMovel/2, -altJanelaPequena/2, largJanela/2-largHasteMovel>, //texture { Aluminum } pigment { color rgb corHaste } } box { <-espHasteMovel/2, altJanelaPequena/2-largHasteMovel, -largJanela/2>, //texture { Aluminum } pigment { color rgb corHaste } } box { <-espHasteMovel/2, -altJanelaPequena/2, -largJanela/2>, //texture { Aluminum } pigment { color rgb corHaste } } } #declare hasteVertical= box { <-espHasteFixa/2, -.5, -largHasteFixaVertical/2>, //texture { Aluminum } pigment { color rgb corHaste } } #declare hasteHorizontal= box { <-espHasteFixa/2, -largHasteFixaHorizontal/2, -.5>, //texture { Aluminum } pigment { color rgb corHaste } } /* desenha janelas */ #declare s1=seed(0); #declare minAnguloAbertura=20; // graus #declare maxAnguloAbertura=45; // graus #declare deltaAbertura=maxAnguloAbertura-minAnguloAbertura; /* desenha janelas ao longo de z, na parede x=0 */ #declare paredeDeVidroZ = union { #declare ijanZ=0; #declare inumJanZ=0; #while (inumJanZ < numJanelasZ) object { hasteVertical scale <1, altBandejao, 1> translate <0, altBandejao/2, ijanZ> } #declare ijanZ=ijanZ+largHasteFixaVertical/2; #declare ijanY=0; #declare inumJanY=0; #while (inumJanY < numJanelasGrandesY) #if (inumJanZ=0) object { hasteHorizontal scale <1, 1, largBandejao1> translate <0, ijanY+largHasteFixaHorizontal/2, largBandejao1/2> } #end #declare ijanY = ijanY+largHasteFixaHorizontal; #declare r1=rand(s1); #if ((inumJanY<2) | (inumJanZ=0)) object { janelaGrande // janela fechada translate <0, ijanY+altJanelaGrande/2, ijanZ+largJanela/2> } #else object { janelaGrande // janela aberta rotate <0, 0, -(minAnguloAbertura+deltaAbertura*r1)> translate <0, ijanY+altJanelaGrande/2, ijanZ+largJanela/2> } #end #declare ijanY = ijanY+altJanelaGrande; #declare inumJanY = inumJanY+1; #end #declare inumJanY=0; #while (inumJanY < numJanelasPequenasY) #if (inumJanZ=0) object { hasteHorizontal scale <1, 1, largBandejao1> translate <0, ijanY+largHasteFixaHorizontal/2, largBandejao1/2> } #end #declare ijanY = ijanY+largHasteFixaHorizontal; #declare r1=rand(s1); #if (inumJanZ=0) object { janelaPequena translate <0, ijanY+altJanelaPequena/2, ijanZ+largJanela/2> } #else object { janelaPequena rotate <0, 0, -(minAnguloAbertura+deltaAbertura*r1)> translate <0, ijanY+altJanelaPequena/2, ijanZ+largJanela/2> } #end #declare ijanY = ijanY+altJanelaPequena; #declare inumJanY = inumJanY+1; #end #if (inumJanZ=0) object { hasteHorizontal scale <1, 1, largBandejao1> translate <0, ijanY+largHasteFixaHorizontal/2, largBandejao1/2> } #end #declare ijanZ = ijanZ+largJanela+largHasteFixaVertical/2; #declare inumJanZ = inumJanZ+1; #end object { hasteVertical scale <1, altBandejao, 1> translate <0, altBandejao/2, ijanZ> } } //union /* desenha janelas ao longo de x, na parede z=0 */ #declare paredeDeVidroX = union { #declare ijanX=0; #declare inumJanX=0; #while (inumJanX < numJanelasX) object { hasteVertical rotate -90*y scale <1, altBandejao, 1> translate } #declare ijanX=ijanX+largHasteFixaVertical/2; #declare ijanY=altParede; #declare inumJanY=0; #while (inumJanY < (numJanelasGrandesY-2)) #if (inumJanX=0) object { hasteHorizontal rotate -90*y scale translate } #end #declare ijanY = ijanY+largHasteFixaHorizontal; object { janelaGrande // janela fechada rotate -90*y translate } #declare ijanY = ijanY+altJanelaGrande; #declare inumJanY = inumJanY+1; #end #declare inumJanY=0; #while (inumJanY < numJanelasPequenasY) #if (inumJanX=0) object { hasteHorizontal rotate -90*y scale translate } #end #declare ijanY = ijanY+largHasteFixaHorizontal; #declare r1=rand(s1); object { janelaPequena rotate <0, 0, -(minAnguloAbertura+deltaAbertura*r1)> rotate -90*y translate } #declare ijanY = ijanY+altJanelaPequena; #declare inumJanY = inumJanY+1; #end #if (inumJanX=0) object { hasteHorizontal rotate -90*y scale translate } #end #declare ijanX = ijanX+largJanela+largHasteFixaVertical/2; #declare inumJanX = inumJanX+1; #end object { hasteVertical rotate -90*y scale <1, altBandejao, 1> translate <0, altBandejao/2, ijanZ> } } //union /* desenha mesas */ #declare bool1=0; #declare imesax=distMesa_ParedeX+compMesa/2; #declare inumMesasX=0; #while (inumMesasX < numMesasX) #declare imesaz=distMesa_ParedeZ+largMesa/2; #declare inumMesasZ=0; #while (inumMesasZ < numMesasZ) object { mesaCompleta translate } #declare imesaz = imesaz+largMesa+entreMesasZ; #declare inumMesasZ=inumMesasZ+1; #end #if (bool1=0) #declare imesax = imesax+compMesa+entreMesasJuntas; #declare bool1=1; #else #declare imesax = imesax+compMesa+entreMesasX; #declare bool1=0; #end #declare inumMesasX=inumMesasX+1; #end object { casaLavaBandeja scale <6/7, 1, .66> translate <6/7*compLB/2 + distLB_ParedeX, 0, 0> } object { casaLavaBandeja translate } object { rampaCompleta translate } object { plataformaSuperior } object { bilheteria } object { casaNutr } object { paredeDeVidroZ } object { paredeDeVidroZ scale <-1,1,1> translate } object { paredeDeVidroX } object { paredes } /* chão */ plane { y, -0.001 //pigment { color rgb <.6, .9, .6> } //normal { bumps .75 scale .25 } pigment { agate color_map { [0.0 color rgb <.6, .9, .6>] [1.0 color rgb <.3, .6, .3>] } } } box { <0,0,0>, pigment { color rgb corChao } } /* céu */ // background { color rgb <.5,.8,1> } sky_sphere { pigment { gradient y color_map { [.0015 color rgb <1, 1, .8>] [.0015 color rgb <.75, 0.95, 1>] [.01 color rgb <.5, 0.8, 1>] [.2 color rgb <.4, .6, .8>] } scale 2 translate -1 } pigment { bozo turbulence 0.65 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 <-120, 90, 0> } /* luz */ #declare lamp= sphere { 0, 1 pigment { color rgb <1, 1, .5> } } #declare corLuz = .2; #declare corLuz2 = .3; #declare altLuz = 12; #declare dluz = 4; light_source { color rgb .6 //area_light , <0, 0, largBandejaoTotal>, 20, 10 shadowless } /* light_source { color rgb .6 shadowless } */ light_source { color rgb 1 area_light , <0, 0, largBandejaoTotal>, 10, 6 //shadowless //looks_like { lamp } //adaptive 0 } /* iluminacao interna */ light_source { < dluz, altLuz, dluz > color rgb corLuz shadowless } light_source { < compBandejao-dluz, altLuz, dluz > color rgb corLuz shadowless } light_source { < compBandejao-dluz, altLuz, largBandejao1-dluz > color rgb corLuz shadowless } light_source { < dluz, altLuz, largBandejao1-dluz > color rgb corLuz shadowless } light_source { < compBandejao/2, altLuz, dluz > color rgb corLuz shadowless } light_source { < compBandejao/2, altLuz, largBandejao1-dluz > color rgb corLuz shadowless } //light_source { color rgb 1 } /* ilumincao externa */ /* light_source { <-1, 1, largBandejao1/2> color rgb 1 } light_source { color rgb 1 } */ camera { //ultra_wide_angle location look_at sky <0,1,0> //angle 180 } /* em cima da rampa */ /* camera { location look_at sky <0,1,0> } */ /* de fora */ /* camera { location <-10, 4, largBandejao1/3> look_at sky <0,1,0> } */ /* top view global */ /* camera { location look_at sky <0,1,0> } */ /* top view rampa */ /* camera { location look_at sky <0,1,0> } */ /* animacao 360 graus */ /* camera { location look_at sky <0,1,0> } */