13.07.2015 Views

Manual de Apoio 2010

Manual de Apoio 2010

Manual de Apoio 2010

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

int target , int level , int internalformat ,int width , int height , int <strong>de</strong>pth , int bor<strong>de</strong>r ,int format , int type ,Buffer pixels);Estas três funções permitem-nos dizer ao OpenGL tudo aquilo que ele precisa <strong>de</strong> saber relativamente à imagemcontida no array pixels. A função glTextImage carrega para a memória, a imagem fornecida e torna-a atextura actual a ser aplicada na geometria. Este carregamento para a memória po<strong>de</strong> ser dispendioso (alternativasdiscutidas mais à frente na Secção 8.6).O valor do target para cada uma das funções é respectivamente : GL TEXTURE 1D, GL TEXTURE 2D eGL TEXTURE 3D ou GL PROXY TEXTURE 1D, GL PROXY TEXTURE 2D ou GL PROXY TEXTURE 3D. Ao utilizar proxies,o OpenGL faz uma verificação prévia do que o sistema suporta em termos <strong>de</strong> compatibilida<strong>de</strong>, no caso <strong>de</strong> nãohaver suporte, o estado da imagem é tornado inválido sem que qualquer tipo <strong>de</strong> erro seja reportado 1 .O argumento level <strong>de</strong>fine o nível <strong>de</strong> mipmapping (discutido na Secção 8.5.3), <strong>de</strong> momento utilizaremostexturas sem mipmapping, especificando o valor 0.O argumento internalFormat, especifica quantos componentes <strong>de</strong> cor são armazenados por texel, o espaçonecessário ao armazenamento dos componentes e/ou se a textura é comprimida. A Tabela 8.1 lista os valoresmais comuns para este parâmetro.ConstanteGL ALPHAGL LUMINANCEGL LUMINANCE ALPHAGL RGBGL RGBAArmazenar os texels como:Valores <strong>de</strong> alphaValores <strong>de</strong> luminânciaValores <strong>de</strong> luminância e alphaComponentes <strong>de</strong> red, green e blueComponentes <strong>de</strong> red, green, blue e alphaTabela 8.1: Factores <strong>de</strong> Blending do OpenGLOs valores <strong>de</strong> width, height e <strong>de</strong>pth (apropriadamente) especificam as dimensões da textura que estamosa carregar para a memória. Estas dimensões <strong>de</strong>vem ser inteiros com base 2 (2 x = 1, 2, 4, 8, . . . ), isto nãoimplica que o mapeamento da textura seja quadrado, mas um valor não 2 x provovará que o mapeamento sejaimplicitamente <strong>de</strong>sabilitado.O argumento bor<strong>de</strong>r especifica a largura da borda à volta da textura. Esta borda permite acrescentartexels adicionais à textura.Os argumentos format, type, têm o mesmo objectivo que quando utilizados na função glDrawPixels. Oargumento pixels contêm a informação da imagem propriamente dita.Para aplicarmos textura à nossa geometria temos que activar o seu estado apropriado. Para tal utilizamosas funções glEnable/glDisable com as constantes GL TEXTURE 1D, GL TEXTURE 2D e GL TEXTURE 3D 2 , comoilustra o exemplo:glDisable ( GL2 . GL_TEXTURE_1D );glEnable ( GL2 . GL_TEXTURE_2D );8.1.1 Pipeline do Carregamento <strong>de</strong> ImagensO carregamento <strong>de</strong> imagens no OpenGL (por ex.: utilizando glTexImage) obe<strong>de</strong>ce a um pipeline <strong>de</strong> processamentoà semelhança do pipeline <strong>de</strong> transformações do OpenGL.As operações <strong>de</strong> convolução, pixel zoom, pixel packing, . . . (discutidas no capítulo anterior) são aplicadassegundo a Figura 8.2.8.1.2 Utilizando o Color BufferÉ possível carregar texturas 1D e 2D a partir do color buffer, utilizando as seguintes funções:glCopyTexImage1D (int target , int level , int internalformat ,int x, int y, int width ,int bor<strong>de</strong>r);1 Para verificar se foi bem sucedido utiliza-se a função glGetTexParameter2 É boa i<strong>de</strong>ia <strong>de</strong>sactivar os estados não utilizados, uma vez que apenas um <strong>de</strong>stes estados po<strong>de</strong> existir em simultâneo79

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

Saved successfully!

Ooh no, something went wrong!