Introdução a Texturas

Texturas são imagens especiais que são desenhadas em cima de polígonos para dar-lhes maior detalhe.

Texturas podem ser criadas em tempo real ou carregadas de um arquivo de imagem.

Como imagens de Blitz2D, texturas são compostas de pixels. Estes pixels podem ser acessados pelas coordenadas x,y como em imagens - só que de um modo ligeiramente diferente.

Em vez de valores de x,y que variam de 0 até o tamanho da textura, valores x,y para texturas variam de 0 a 1. Isto significa o pixel de textura no ponto .5, .5 sempre está no centro da textura. Isto é possivelmente um pouco confuso no princípio, mas na verdade se mostra muito conveniente por você não ter que se preocupar com as dimensões das suas texturas!

 'Flags' de Texturas 

Quando uma textura é criada, valores chamados 'flags' são fornecidos para indicar que tipo de textura será usado.

Estes são os valores válidos:

1: A textura tem informação de cor.
2: A textura tem informação de transparência (alfa).
4: A textura é uma textura vazada (mask).
8: A textura tem efeito 'mipmapping'.
16: A textura é horizontalmente fixa.
32: A textura é verticalmente fixa.
64: Textura com efeito 'spherical environment map'.

Estes valores podem ser somados para combinar o efeito de diferentes flags. Por exemplo, uma textura com valor 3 indica você quer uma textura com unformação de cor e informação de alfa.

Se nem a cor, alfa ou textura vazada forem usadas, então a textura é criada em um formato especial que lhe permite desenhar nela usando comandos de Blitz2D ou mesmo Blitz3D! Uma textura criada deste modo terá informação de cor, mas pode ou não ter informação de alfa (isto depende de que placa de vídeo você está usando!), assim é realmente mais seguro assumir que ela não tem nenhuma informação de alfa.

Se a textura vazada for usada, são ignoradas as informações de cor e alfa.

Nas texturas vazadas, os pixels da cor preta ficam transparentes.

Com efeito 'mipmapping' as texturas ficam mais 'embaçadas' quando estão muito distantes.

As texturas fixas lhe permitem controlar se a textura 'envolve' o objeto ou não. Por padrão, texturas irão 'envolver' ou 'repetir' em áreas grandes. Porém, você pode prevenir isto usando as texturas fixas.

Finalmente, o 'spherical environment map' provê um modo fácil para termos uma aparência 'espelhada' no objeto. Experimente!

 Criando Texturas 

Você pode criar uma textura e desenhar sobre ela em tempo real, ou carregar uma textura de um arquivo de imagem.

Carregando uma textura de um arquivo é fácil:

   
    texture=LoadTexture( "mytexture.jpg",3 )    

 

Note o flag de valor 3. Isto indica que nós queremos que a textura contenha informação de cor e alfa.

Porém, o formato JPG não suporta informação de alfa! Neste caso, o Blitz3D criará seus próprios valores alfa baseado nas cores da textura.

Já, os formatos PNG e TGA suportam informação de alfa, e Blitz3D usará esta informação se estiver presente.

Para criar uma textura 'na mão', use o comando de CreateTexture.

   
    ;cria uma textura 256x256
    texture=CreateTexture( 256,256,0 )

    ;lê sua largura...
    width=TextureWidth( texture )

    ;...e altura
    height=TextureHeight( texture )

 

Por que nós estamos recobrando o tamanho de textura quando nós já informamos para o Blitz3D o tamanho dela?

Bem, isto é porque todos as placas de vídeo 3D têm limites quanto ao tamanho de textura que eles podem controlar. Tipicamente, largura e altura deveriam ser múltiplos de 2 (ex: 1,2,4,8,16,32,64,128,256,512,1024...) e em alguns casos - placas 3DFX sendo as maiores culpadas aqui - não podem ser maiores que 256 x 256.

Também há rumores que algumas placas podem controlar só texturas quadradas - embora aqui na Blitz Research nós ainda não encontramos uma dessas!

Um textura onde largura e altura são ambas múltiplos de 2 e <= 256 é quase garantido ser suportada por sua placa - mas nunca faz mal conferir!

No momento que você especifica um tamanho de textura não suportado pela placa de vídeo, o Blitz3D escolherá o tamanho mais próximo que seja suportado.

Note também que estamos usando flags valor 0. Isto é porque, provavelmente, queremos desenhar algo à textura, e para poder usar comandos de gráficos em uma textura você não deve especificar a cor, alfa ou 'mask' da textura.

OK, agora que criamos nossa textura nós deveríamos desenhar algo nela:

   
     ;define o fluxo de desenho como sendo a textura
    SetBuffer TextureBuffer( texture )

    ;torna vermelha a cor de fundo
    ClsColor 255,0,0

    ;aplica a cor de fundo
    Cls 

    ;muda a cor de desenho para azul
    Color 0,0,255 

    ;desenha um oval azul
    Oval 0,0,width,height 

    ;de volta ao 'backbuffer'   
    SetBuffer BackBuffer()  

 


Finalmente, uma vez que você terminou com uma textura, use FreeTexture para liberá-la.

 Animando Texturas 

ScaleTexture, RotateTexture e PositionTexture podem ser usados para animar texturas. Por exemplo, para fazer uma textura 'deslizar' , você poderia usar algo como:

 


    ;adiciona .1 para a posição x da textura.
 
    texture_x# = texture_x# + .1

    ;posiciona a textura.
    PositionTexture texture,texture_x#,0

 

...no seu loop principal. Você pode escalar e girar texturas dinamicamente de um modo semelhante.

 Multitexturas 

O Blitz3D lhe permite aplicar até 8 texturas a um único triângulo, uma técnica conhecida como 'multitexturas'.

Um uso comum para multitexturas é 'mapeamento de luz' (light mapping), uma técnica onde uma textura que contém informação de iluminação é combinada com uma textura que contém informação de cor para prover efeitos de iluminação.

Quando você usa os comandos EntityTexture ou BrushTexture, um parêmetro opcional 'índice' lhe permite controlar qual das 8 texturas você está definindo.

Por padrão, são combinadas texturas múltiplas usando multiplicação o que gera um efeito tipo iluminação. Porém, o comando TextureBlend lhe permite executar outras operações como alfa-blend e adicionar texturas múltiplas.

Copyright 2001 (c) Paul Gerfen - GamecodingUK