Mapeamento de Textura Felipe Natale Munhoz munhoz@gmail.com Junho de 2007
Sumário 1 Introdução 3 2 Objetivo 4 3 Tipos de Texturas 5 4 Mapeamento de Texturas em OpenGL 10 5 Referências 14
Seção 1 Introdução Um dos principais objetivos da Computação Gráfica é criar cenas que fiquem o mais perto da realidade possível. A parte da Computação Gráfica que trata disso é o Realismo, que se dá principalmente através: da atribuição de cores e gradientes dos objetos; das definições de iluminação do ambiente; do mapeamento de texturas sobre os objetos sintéticos.
Seção 2 Objetivo Os modelos de iluminação não são capazes de descrever todas as propriedades da superfície de um objeto, tais como suas caractéristicas de rugosidade e alguns padrões mais complexos do objeto. Até seria possível definir as características de um objeto somente utilizando cores e iluminação da cena, entretanto essa abordadem tem duas desvantagens: Complexidade de definição das propriedades do objeto; Necessidade de alto poder de processamento. Desta forma, na prática, esses efeitos de realidade são obtidos através de mapas de textura.
Seção 3 Tipos de Texturas Surface Textures Um dos tipos de textura mais simples. São basicamente matrizes bidimensionais que são mapeadas pixel a pixel para o objeto. Podem ser geradas através de algoritmos ou também a partir de imagens criadas previamente. Também é muito utilizada como papel de parede podendo replicar a imagem para toda a superfície do objeto.
Solid Textures Enquanto nas texturas de superfície o principal método de obtenção das texturas é uma foto, nas texturas sólidas, elas normalmente são obtidas diretamente por algoritmos. Para gerar texturas mais interessantes são utilizadas algumas funções de ruído, que vão desde um deslocamento para algumas cores até a utilização de fractais. As texturas sólidas também são muito usadas para simular nuvens e fogo, produzindo efeitos muito interessantes.
Bump Mapping Pode ser traduzido como mapeamento de rugosidade, porém, seu uso não está restrito ao ato de querer dar uma aparência rugosa a uma determinada superfície. É também usado quando se deseja obter um efeito áspero, dentado, perfurado, sem que se altere a superfície, dando a ilusão de que o objeto possui tais características.
Reflection Mapping É utilizado na renderização de objetos reflexivos. É capaz de simular efeitos de Ray tracing com baixo processamento.
Light Map Os light maps possibilitam um pré-cálculo da luz necessária para os mapas de textura e são úteis para dar velocidade no render de objetos 3D com iluminação complexa. O grande problema deste tipo de mapeamento é que a fonte de luz deve ser estática. Sempre que a fonte de luz for movimentada é necessário realizar todos os calculos novamente.
Seção 4 Mapeamento de Texturas em OpenGL O uso de texturas em OpenGL necessita da execução de dois passos fundamentais: Carga da Textura Aplicação da Textura Cada Textura recebe um número de identificação. Sempre que for necessário trabalhar com textura é necessário definir qual a Textura corrente através do seu identificador OpenGL exige que as dimensões das imagens de Texturas sejam potências de 2 As imagens das texturas podem também ter 1 ou 2 pixels de borda sobre suas extremidades.
Carga da Textura glenable(gl TEXTURE 2D); // Habilitar o uso de texturas GLuint texture id[max TEXTURES]; // Definir quantas texturas serão usadas glgentextures(1, texture id); // Gerar um identificador para as texturas glbindtexture(gl TEXTURE 2D, texture id[0]); // Definir atual image t image; // Carrega a imagem para a textura tgaload( TGAimage.tga, &image, TGA FREE TGA LOW QUALITY);
Aplicação da Textura Para realizar a aplicação de uma textura em OpenGL é necessário criar uma relação entre os vértices da textura e os vértices dos polígonos sobre os quais se deseja mapear a textura escolhida.
Aplicação da Textura glbindtexture(gl TEXTURE 2D, texture id[0]); // associa cada vértice do polígono a um ponto da textura gltexcoord2f(1.0f, 0.0f); glvertex3f( 1.0f, -1.0f, -1.0f); gltexcoord2f(1.0f, 1.0f); glvertex3f( 1.0f, 1.0f, -1.0f); gltexcoord2f(0.0f, 1.0f); glvertex3f( 1.0f, 1.0f, 1.0f); gltexcoord2f(0.0f, 0.0f); glvertex3f( 1.0f, -1.0f, 1.0f);
Seção 5 Referências Foley J. and Dam A and Feiner S. and Hughes J., Computer Graphics: Primciples and Practice, pp. 741-744, 1990. Azevedo E. and Conci A., Computação Gráfica: Teoria e Prática, pp. 314-335, 2003. Cohen M. and Manssour I., OpenGL uma abordagem prática e objetiva, pp. 274-311, 2006.