5.3.3 Luz EspecularA luz especular vem <strong>de</strong> uma direcção em especifico, é reflectida <strong>de</strong> maneira uniforme, mas o feixe da sua reflexãocontinua a ser direccional (Figura 5.12). Os objectos afectados por luz especular costumam mostrar um pontomais iluminado, on<strong>de</strong> a luz inci<strong>de</strong> com mais intensida<strong>de</strong>.Figura 5.12: Objecto iluminado com Luz Especular5.3.4 Luz <strong>de</strong> Modo GeralNenhuma cena é composta <strong>de</strong> um único tipo <strong>de</strong> luz, é antes composta pelo conjunto das vaŕias componentes comvárias intensida<strong>de</strong>s. A titulo <strong>de</strong> exemplo, imaginemos um feixe <strong>de</strong> laser vermelho num quarto escuro. O feixepo<strong>de</strong>rá ser comparado com a luz especular, as partículas <strong>de</strong> pó que reflectem parte da luz do laser po<strong>de</strong>m serconsi<strong>de</strong>radas luz difusa e o matizado vermelho nas pare<strong>de</strong>s do quarto po<strong>de</strong> ser comparado com a luz ambiente.Da mesma forma que a cor, os vários tipos <strong>de</strong> luz têm um valor RGBA associado 1 . Assim por exemplo parao laser vermelho po<strong>de</strong>ríamos ter os valores na Tabela 5.1.Red Green Blue AlphaSpecular 0.99 0.0 0.0 1.0Diffuse 0.10 0.0 0.0 1.0Ambient 0.05 0.0 0.0 1.0Tabela 5.1: Distribuição <strong>de</strong> Luz e Cor <strong>de</strong> um Laser VermelhoPela interpretação da tabela, po<strong>de</strong>mos concluir que o laser vermelho tem uma forte componente especular,uma pequena componente difusa e pouquíssima componente <strong>de</strong> luz ambiente. O mais certo é que, a presença <strong>de</strong>partículas, gere uma componente difusa <strong>de</strong> luz, induzindo luz ambiente no compartimento.As componentes difusa e ambiente são muito semelhantes na natureza e são normalmente combinadas.5.4 Materiais no Mundo RealA forma como os materiais aparecem no mundo real <strong>de</strong>pen<strong>de</strong> dum conjunto <strong>de</strong> factores, no entanto, os mais<strong>de</strong>terminantes tem a ver com a sua cor, e as condições <strong>de</strong> iluminação que o ro<strong>de</strong>iam. Assim, por exemplo, umabola azul reflecte a maior parte dos comprimentos <strong>de</strong> onda azuis e absorve gran<strong>de</strong> parte dos outros.Na maioria dos cenários, a luz é branca, no entanto mudando a luz para amarelo, por exemplo, a nossa bolateria uma cor escura (ou mesmo preto) uma vez que absorve tudo que não seja azul.Proprieda<strong>de</strong>s dos MateriaisQuando utilizamos luzes, não <strong>de</strong>finimos o material <strong>de</strong> um <strong>de</strong>terminado polígono só pela cor, dizemos antes, qual acor da luz que eles reflectem. Os materiais po<strong>de</strong>m reflectir luz especular <strong>de</strong> uma <strong>de</strong>terminada cor e absorver todaa luz difusa da mesma cor, ou ao contrário. Outra proprieda<strong>de</strong> que é <strong>de</strong>finida nos materiais, é a sua capacida<strong>de</strong><strong>de</strong> gerar luz própria.Adição <strong>de</strong> Luz aos MateriaisNão existe nenhuma regra (como a do RGB Colorspace) para ajudar a <strong>de</strong>finir as proprieda<strong>de</strong>s i<strong>de</strong>ais <strong>de</strong> luzes emateriais. Normalmente os resultados são conseguidos com alguma prática e análise.1 Para efeitos <strong>de</strong> luz o alpha é ignorado45
Ao <strong>de</strong>senhar objectos, o OpenGL <strong>de</strong>ci<strong>de</strong> qual a cor para cada pixel. Cada vértice das nossas primitivas temum valor RGB diferente baseado no efeito conjunto das 3 componentes <strong>de</strong> luz ambiente, difusa e especularmultiplicado pela reflectivida<strong>de</strong> ambiente, difusa e especular do material.Calculo do Efeito das luzesO cálculo do RGB das três componentes <strong>de</strong> luz é feito <strong>de</strong> forma similar. No entanto, a direccionalida<strong>de</strong> das luzesdifusa e especular <strong>de</strong>pen<strong>de</strong> do ângulo <strong>de</strong> incidência da luz.O cálculo do RGB obtido a partir da incidência da luz (ambiente neste caso) com o RGB (0.5, 0.5, 0.5)numa superfície com proprieda<strong>de</strong>s reflectivas da luz ambiente (0.5, 1.0, 0.5) po<strong>de</strong> ser calculado da seguinteforma;Ou seja,RGB reflected = RGB light × RGB materialRGB reflected = (0.5, 0.5, 0.5) × (0.5, 1.0, 0.5) = (0.25, 0.5, 0.25)Figura 5.13: Compontente <strong>de</strong> luz ambiente <strong>de</strong> um Objecto5.5 Adição <strong>de</strong> Luzes ao CenárioA fim <strong>de</strong> consolidar os conceitos teóricos nas secções anteriores, e antes <strong>de</strong> avançarmos com mais conceitos, épertinente contextualizá-los no OpenGL.Activação a LuzPara utilizar a luz no OpenGL activamos a flag GL LIGHTING:gl. glEnable ( GL2 . GL_LIGHTING );gl. glColor3f (0.75f, 0.75f, 0.75 f);gl. glBegin ( GL2 . GL_TRIANGLES );gl. glVertex3f (60f, -40, 0f);gl. glVertex3f ( -60f, -40f, 0f);gl. glVertex3f (0f, 40f, 0f);gl. glEnd ();Ao activar a flag GL LIGHTING, o OpenGL <strong>de</strong>termina a cor <strong>de</strong> cada vértice com base nos parâmetros dosmateriais. Como ainda não foram <strong>de</strong>finidos quaisquer parâmetros dos materiais, os objectos no nosso cenárioaparecem escuros e sem qualquer luz (Figura 5.14).Configuração do Mo<strong>de</strong>lo <strong>de</strong> LightingO primeiro passo <strong>de</strong>pois <strong>de</strong> activar o cálculo <strong>de</strong> luzes é configurar o mo<strong>de</strong>lo <strong>de</strong> lighting. As três componentes <strong>de</strong>luz que afectam o nosso mo<strong>de</strong>lo <strong>de</strong> lighting são <strong>de</strong>finidos com recurso à função:glLightMo<strong>de</strong>lfv ( int mo<strong>de</strong> , float [] params , int offset );46