Aula 4. Texturização
Os seguintes exercícios propõem prática e fixação do mapeamento de texturas usando OpenGL.
1. Especificando coordenandas de textura
manualmente e usando múltiplas texturas.
Criem um objeto simples usando quads (para
simplificar) ou triângulos em Opengl (não precisa usar a
classe malha). Digamos, um cubo. Agora, usando 6 imagens de textura que
vocês mesmos podem criar no Paint ou onde preferirem, transformem
o cubo em um dado. Basicamente, será necessário passar as
coordenadas dos vértices, um por um, e as coordenadas de
textura, uma a uma. Será também necessário criar
as 6 texturas a partir de 6 arquivos e fazer o binde de cada uma.
Fig. 1. Exemplo de resultado
esperado
2. Combinando texturas
Agora, experimentem combinar duas ou mais texturas
em um único objeto, sobrepondo-as.
Primeiro, criem um ambiente com mais de um objeto e mapeiem uma textura
em cada. Têm total liberdade para escolher como modelar os
objetos e como passar as coordenadas de textura. Para começar,
eu sugiro usar os objetos que já usamos nas aulas anteriores e
mesmo nesta.
Em seguida, experimentem mapear as duas texturas
sobre o mesmo objeto. Como?
Usaremos uma extensão da OpenGL (ARB) que
está definida no arquivo: #include <GL/glew.h>
Este arquivo permite fazer chamadas para a função:
|
Isso permite alterar parâmetros de cada
textura separadamente. Assim, podemos usar o modo BLEND e MODULATE com
o GL_TEXTURE_ENV_MODE
para a segunda textura.
Baixem a glew a partir de: http://glew.sourceforge.net
Ajustem os includes e as libraries para o compilador e o ligador.
Usuários do
Dev-C++:
O Dev-C++ não entende a estrutura do arquivo .lib da glew. Uma
solução é usar a glew32.dll diretamente no ligador
do Dev. Depois de baixar os binários Windows do site da GLEW,
copiem o glew32.dll no diretório do seu projeto. No Dev-C++
façam:
> Project
> Project Options
> Parameters
> Add Library or
Object
> Troque o Files Type
para todos os arquivos (*.*)
> Selecione glew32.dll
> Clique OK
|
Um detalhe que falta é que será
preciso também enviar as coordenadas de textura separadamente
para cada textura.
Com a abordagem clássica:
|
Com a abordagem mais moderna e rápida:
|
Obs. O mesmo
efeito pode ser obtido carregando duas imagens,
modulando as duas em uma terceira imagem e só então
fazendo o bind dessa terceira imagem na textura. A
modulação pode ser qualquer operação entre
cada pixel. Se quiserem, experimentem intuitivamente várias
possibilidades. Essa abordagem tem a desvantagem de ser processada via
software na CPU, enquanto que a anterior é feita pelo hardware
da GPU.
3. Textura de elevações
4. Bump mapping e outros efeitos