Manual de Apoio 2010
Manual de Apoio 2010
Manual de Apoio 2010
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
int x, GLint y,int width , int height);glCopyTexSubImage3D (int target , int level ,int xoffset , int yoffset , int zoffset ,int x, GLint y,int width);Po<strong>de</strong>m ter reparado que não existe uma função glCopyTexImage3D, isto <strong>de</strong>ve-se ao facto do color bufferser bi-dimensional. No entanto po<strong>de</strong>mos querer copiar informação do color buffer para uma face (plano?) emespecífico da nossa textura 3D, isso po<strong>de</strong> ser conseguido utilizando glCopyTexSubImage3D.8.2 Mapeamento <strong>de</strong> Texturas à GeometriaAo activar o mapeamento <strong>de</strong> texturas, o OpenGL permite-nos mapear qualquer textura a qualquer uma dasprimitivas. No entanto, é necessário fornecer ao OpenGL informação acerca <strong>de</strong> como esse mapeamento é feito, oque é conseguido especificando uma coor<strong>de</strong>nada na textura (texture coordinate) para cada vértice. Os texels 1não são especificados utilizando posições <strong>de</strong> memória, tal como nos pixmaps, mas com um sistema <strong>de</strong> coor<strong>de</strong>nadasmais abstracto. As coor<strong>de</strong>nadas das texturas são normalmente especificadas utilizando valores entre 0.0 e 1.0.Os nomes das coor<strong>de</strong>nadas são s, t, r e q (semelhantes á coor<strong>de</strong>nadas vectoriais x, y, z e w). A Figura 8.3mostra como os texels são especificados com base em coor<strong>de</strong>nadas 1D, 2D e 3D.Figura 8.3: Coor<strong>de</strong>nadas dos texels numa texturaO factor q representa um factor <strong>de</strong> escala da textura, à semelhança do valor w dos vértices. Ou seja, osvalores das coor<strong>de</strong>nadas das texturas são realmente s/q, t/q e r/q. Por omissão q=1.0.A coor<strong>de</strong>nada na textura é especificada utilizando a função glTexCoord. Esta função tem um conjunto <strong>de</strong>variações para vários objectivos, à semelhança das funções em geral do OpenGL. Algumas formas simples <strong>de</strong>stasfunções são:glTexCoord1f ( float s);glTexCoord2f ( float s, float t);glTexCoord3f ( float s, float t, float r);A coor<strong>de</strong>nada da textura é aplicada utilizando estas funções para cada um dos vértices. O OpenGL estica ouencolhe (alias stretching) a textura <strong>de</strong> forma a aplicá-la na geometria especificada com base nas coor<strong>de</strong>nadasespecíficadas. A forma como o stretching é feito <strong>de</strong>pen<strong>de</strong> do filtro da textura (texture filter) actual, discutidomais à frente. A Figura 8.4(a) mostra o exemplo <strong>de</strong> ume textura bi-dimensional aplicada a um GL QUAD. Noscantos do quad temos as coor<strong>de</strong>nadas correspon<strong>de</strong>ntes da textura. A função glTexCoord tem que ser utilizadaantes <strong>de</strong> cada chamada à função glVertex.Esta coincidência entre geometria e textura é rara. Um exemplo mais comum será o da Figura 8.4(b). Ascoor<strong>de</strong>nadas da textura neste caso não coinici<strong>de</strong>m com a forma da geometria.1 Um texel é um fragmento da textura, tal como o pixel <strong>de</strong> um pixmap81