13.07.2015 Views

Manual de Apoio 2010

Manual de Apoio 2010

Manual de Apoio 2010

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

No processo <strong>de</strong> filtering, o OpenGL utiliza os texels na vizinhança <strong>de</strong> uma <strong>de</strong>terminada posição para fazero sampling da textura 1 . Com este processo obtemos resultados perfeitos quando a textura é vista <strong>de</strong> frente(perpendicularmente à geometria), no entanto, quando a geometria é vista <strong>de</strong> forma oblíqua po<strong>de</strong>mos observar aperda <strong>de</strong> informação da imagem (como que uma <strong>de</strong>sfocagem).Para evitar este efeito a área da vizinhança utilizada no filtering tem agora uma forma a<strong>de</strong>quada à posição doobservador (Figura 9.2). Isto implica que vários samples da imagem sejam feitos, relativamente ao observador,resultado numa imagem anisotrópica.Figura 9.2: Textura normal vs Anisotropic FilteringPo<strong>de</strong>mos aplicar o anisotropic filtering a texturas básicas e mipmapped. Para tal são efectuados 3 passos:1. Verificamos se a extensão para anisotropic filtering está disponível:GL2 gl = ...;gl. isExtensionAvailable (" GL_EXT_texture_filter_anisotropic ");2. Obtemos valor máximo <strong>de</strong> anisotpropia suportado:// Array temporario <strong>de</strong> saida para a funcao glGetFloatv (...)FloatBuffer out = FloatBuffer . allocate (1);gl. glGetFloatv ( GL2 . GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT , out );// Valor maximo <strong>de</strong> anisotropia esta na posicao 0 <strong>de</strong> outfloat largest = out . get (0);3. Finalmente <strong>de</strong>finimos a quantida<strong>de</strong> <strong>de</strong> anisotropia utilizando:gl. glTexParameterf (GL2 . GL_TEXTURE_2D ,GL2 . GL_TEXTURE_MAX_ANISOTROPY_EXT ,largest);Quando maior o valor <strong>de</strong> anisotropia <strong>de</strong>finido, maior será a quantida<strong>de</strong> <strong>de</strong> texels que são utilizados noprocesso <strong>de</strong> filtering.Pegando no exemplo Tunnel.java dos capítulos anteriores, as texturas serão carregadas da seguinte formano método init():// ...// Se afLargest se mantiver a 0 nao suporta anisotropic filteringfloat afLargest = 0f;// Se o anisotropic filtering for suportado obtemos o valor maximo// e armazenamos em afLargestif(gl. isExtensionAvailable (" GL_EXT_texture_filter_anisotropic ")) {FloatBuffer out = FloatBuffer . allocate (1);gl. glGetFloatv ( GL2 . GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT , out );afLargest = out . get (0);}for ( int i = 0; i < textureNames . size (); i ++) {1 Utilizando por exemplo GL NEAREST e GL LINEAR91

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!