Manual de Apoio 2010
Manual de Apoio 2010
Manual de Apoio 2010
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
8.5.2 Texture WrapNormalmente especificamos as coor<strong>de</strong>nadas das texturas com valores entre 0.0 e 1.0 relativamente ao texturemap. A forma como são tratados os valores que saem fora do intervalo [0.0, 1.0] é <strong>de</strong>finida no parâmetro texturewrap. O valor <strong>de</strong>ste parâmetro é <strong>de</strong>finido individualmente para as coor<strong>de</strong>nada s, t e r, utilizando a funçãoglTexParameteri com o pname - GL TEXTURE WRAP S, GL TEXTURE WRAP T, or GL TEXTURE WRAP R. Os modosdisponíveis para o wrapping são:• GL REPEAT: Neste modo a textura é repetida na direcção do valor que ultrapassou o intervalo. Isto permiteutilizar uma textura pequena para superfcícies gran<strong>de</strong>s. Se a imagem for bem escolhida po<strong>de</strong>mos dar asensação <strong>de</strong> uma textura muito maior à custa <strong>de</strong> uma porção mais pequena.• GL CLAMP: Os texels são obtidos a partir da cor borda da imagem. Esta cor é especificada no parâmetroGL TEXTURE BORDER COLOR (configurado com glTexParameterfv).• GL CLAMP TO EDGE: Faz com que os valores fora da borda não sejam utilizados no cálculo da interpolaçãolinear.• GL CLAMP TO BORDER: Utiliza os valores da borda quando as coor<strong>de</strong>nadas da textura caem fora do intervalo[0.0, 1.0].A escolha do tipo <strong>de</strong> wrapping influencia o modo como o filtering funciona, principalmente quando estamos ausar GL LINEAR. Como o valor do fragmento é calculado com base na vizinhança, o cálculo junto das bordas datextura po<strong>de</strong> representar um problema se nos limitarmos a fazer clamping. O problema po<strong>de</strong> ser resolvido <strong>de</strong>forma simples quando utilizamos GL REPEAT. Os novos texels são obtidos a partir da linha/coluna adjacentes, queno repeat mo<strong>de</strong> são tirados a partir do outro extremo da imagem (como se juntássemos as duas arestas opostasda imagem). Isto funciona especialmente bem quando usamos texturas em que um lado encaixa perfeitamenteno outro (por ex.: esferas).Uma aplicação comum para o clamping po<strong>de</strong> ser vista no mapping <strong>de</strong> texturas que não caberiam em memóriapelo seu tamanho. Em vez disso, são utilizados “mosaicos”. No entanto, a não utilização <strong>de</strong> GL CLAMP TO EDGEpo<strong>de</strong> levar ao aparecimento <strong>de</strong> artefactos in<strong>de</strong>sejados no texture mapping.8.5.3 MipmappingO mipmapping é uma técnica que permite melhorar a performance <strong>de</strong> ren<strong>de</strong>rização e a qualida<strong>de</strong> visual <strong>de</strong> umacena. O melhoramento é feito en<strong>de</strong>reçando dois problemas comuns na aplicação <strong>de</strong> textura à geometria:1. Scintillation: Consiste <strong>de</strong> artefactos <strong>de</strong> aliasing que aparecem nas superfcícies quando os objectos sãomuito ren<strong>de</strong>rizados muito pequenos, comparados com a textura que lhes é aplicada. Este efeito é maisnotório quando existe movimento na cena, ou quando o observador se encontra em movimento.2. Performance: Uma gran<strong>de</strong> quantida<strong>de</strong> <strong>de</strong> memória <strong>de</strong>ve ser carregada com texturas e processada (filtering)para ren<strong>de</strong>rizar um conjunto limitado (ou pequeno) <strong>de</strong> fragmentos no ecrã. O que provoca um <strong>de</strong>créscimona performance à medida que a quantida<strong>de</strong> e tamanho das texturas aumenta.Uma solução para estes dois problemas po<strong>de</strong>ria passar pela utilização <strong>de</strong> uma textura mais pequenta. Noentanto, quando nos aproximamos do objecto, essa textura será inevitavelmente escalada, tornando as nossasmenos nítidas ou cheias <strong>de</strong> artefactos.A solução <strong>de</strong>veras eficaz passa pela utilização <strong>de</strong> mipmapping 1 . O mipmapping consiste na utilização <strong>de</strong>várias imagens com diferentes tamanhos e resoluções para a mesma textura. O OpenGL utiliza então tiras dasimagens para aplicar à geometria <strong>de</strong> forma apropriada e com base num novo conjunto <strong>de</strong> filtros. Isto po<strong>de</strong>rá serfeito à custa <strong>de</strong> um pouco mais <strong>de</strong> memória e/ou processamento.Uma textura mipmapped consiste <strong>de</strong> um conjunto <strong>de</strong> imagens, on<strong>de</strong> cada uma é meta<strong>de</strong> da anterior até queatingem o tamanho 1x1 (Figura 8.10).As imagens não precisam <strong>de</strong> ser necessariamente quadradas, neste caso quando uma coor<strong>de</strong>nada chega a 1 aoutra é dividida repetidamente até que chega a 1x1.A utilização <strong>de</strong> mipmapping po<strong>de</strong>rá ocupar até 3× mais memória <strong>de</strong> textura que a não utilização.Os níveis <strong>de</strong> mipmap para cada imagem são especificados no segundo argumento (level) da função glTexImageaquando do seu carregamento. O primeiro nível será 0, <strong>de</strong>pois 1, 2, 4 e por aí fora numa base 2 x em que x é aiteração da imagem. Quando o mipmapping não está a ser utilizado, a imagem especificada no valor 0 é tomadopor omissão.1 Palavra proveniente <strong>de</strong> multum in parvo - muitas coisas num local pequeno86