10.2 Empacotamento
No OpenGL, o modo de empacotamento da textura (em inglês, texture wrapping) define o comportamento do amostrador de textura quando as coordenadas \((u,v)\) estão fora do intervalo \([0, 1]\). Há três comportamentos principais:
GL_REPEAT
: repete a textura fora do intervalo. Esse é o modo padrão de empacotamento.GL_MIRRORED_REPEAT
: igual ao anterior, mas a textura é espelhada em \(u\) e/ou \(v\) quando a parte inteira da coordenada é um número ímpar.GL_CLAMP_TO_EDGE
: Fixa as coordenadas no intervalo \([0, 1]\). O resultado é a repetição dos valores das primeiras e últimas linhas/colunas da textura.
A figura 10.13 mostra o resultado dos diferentes modos de empacotamento no intervalo de \((-1,-1)\) a \((2,2)\) no espaço de textura.
O modo de repetição (GL_REPEAT
) é frequentemente utilizado para produzir padrões formados por texturas ininterruptas (seamless textures). Essas texturas, quando dispostas lado a lado ou como um ladrilho, formam um padrão contínuo. Um exemplo é mostrado na figura 10.14.
O modo de empacotamento é configurado com a função glTexParameteri
. É possível configurar um comportamento diferente para a direção \(u\) (com GL_TEXTURE_WRAP_S
) e direção \(v\) (com GL_TEXTURE_WRAP_T
). Por exemplo, o código a seguir habilita o modo de repetição em \(u\) e o modo de repetição espelhada em \(v\):
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
Em texturas 3D, é possível usar ainda a direção \(w\) (com GL_TEXTURE_WRAP_R
).
Outros modos de empacotamento estão disponíveis além dos modos GL_REPEAT
, GL_MIRRORED_REPEAT
e GL_CLAMP_TO_EDGE
, mas não são suportados em todas as especificações OpenGL. Por exemplo, o modo GL_CLAMP_TO_BORDER
, que usa uma cor sólida para texels fora do intervalo \([0,1]\), não é suportado no OpenGL ES utilizado no WebGL.