Usando texturas no Game Maker

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Qualidade Usando texturas no Game Maker

Mensagem por Convidad em Ter 20 Maio 2008, 00:20

Dá pra fazer muita coisa legal com esse modo de desenho! Dá até pra imitar aquele efeito de luz do Diablo II (o padrão de iluminação das salas): um degradê radial de branco para preto, de meio para a aresta em modo "blending screen". Para não dizer só inteligente é simplesmente perfeito e leve ao mesmo tempo!





Logo vou testar os efeitos de blending que são os mesmos do Photoshop! Se conseguir fazer água e fogo como eu faço lá vou postá-los aqui para vocês. Texturas são leves e bonitas!

Bom, então vamos lá!

Antes de desenhar uma forma primitiva com essa textura, você deve definir alguns parâmetros, como:

texture_set_interpolation(tipo)

Interpolação funciona assim: quando redesenhamos uma imagem na tela de proporções diferentes da imagem original há perda ou ganho de pixels, ok?

É como se esticássemos uma imagem qualquer: se aumentamos há ganho de pixels, se reduzimos há perda.

A interpolação vem pra amenizar a distorção dessa imagem (da perda ou do ganho) para deixá-la o mais parecida possível antes da distorção. O que ela faz é "copiar" os pixels próximos de onde ocorreram essas diferenças e pôr nesses lugares para preenchê-los.

O efeito é perfeito e só se nota diferenças quando a distorção é "brusca".

Resumindo: interpolar uma textura consome mais memória.


texture_set_blending(mesclagem)

Blending quer dizer "mistura". Isso é um dos efeitos mais legais! Cada tipo de blend é um efeito diferente.

O que o blending faz é misturar os padrões de cores da textura aos demais desenhos que ficarão por trás da mesma, somando, subtraindo, multiplicando ou dividindo o valor dessas cores. Existem vários modos de mesclagem e recomendo experimentar todos para conseguir muitos efeitos diferentes.

Aqui só se define usar o efeito blending ou não (true ou false). Para definir esse efeito você vai ter que chamar a rotina draw_set_blend_mode(modo de mesclagem).

Atenção: só use o blending quando precisar dele pois por padrão ele está definido como true!!!



texture_set_repeat(repetir)

Aqui se define com true ou false se uma textura deve repetir-se para preencher uma forma ou não. O padrão é false.

Observação: isso é importante dependendo do que for desenhar. Suponhamos que o desenho seja um muro de tijolos (o clássico muro de tijolos de novo), bastaria que repetíssemos uma pequena textura de um tijolo ou dois para obter o efeito.


Definindo pontos de orientação da textura

Aqui é só um pouco mais complicado, então atenção aqui:

1 - A textura deve ter um tamanho que seja múltiplo de 2, por exemplo: 64x64 ou 128x128 (um bom tamanho para texturas). A largura e altura de uma textura podem ser obtidas através das funções texture_get_width(texid) e texture_get_height(texid). Esses valores são retornados entre 0 e 1 e não o tamanho em pixels!

2 - A textura deve ter um identificador que o Game Maker reconhece como um "id de textura". Você consegue esse id quando define uma sprite ou background para ser usado como textura. As funções são: sprite_get_texture(spr,subimg) e background_get_texture(back).

3 - Se optar pelos efeitos de blending, recomendo que use a função texture_preload(texid). Essa função carrega a textura na memória de vídeo (que é mais rápida). Use somente se a caixa "Preload Texture" na janela de propriedades da sprite não estiver marcada.

4 - Como eu disse no item 1, o valor de largura e altura da textura passarão a ser 0 e 1. Porque isso? É simples: ao invés de fazer várias texturas para um personagem, você pode fazer apenas uma contendo todas elas. Assim você deve especificar onde a textura será colocada na forma primitiva e que parte dela.

Basta se lembrar dos MOD'S de skins de muitos games por aí. Já abriu uma skin do GTA? É tudo assim: uma textura contendo várias outras texturas!


Agora sim é o desenho!



Bom, como eu disse antes, o modo de desenho é o mesmo que havíamos falado no tópico acima. Galera, salvem esta "multi-textura" e usem o código abaixo. Esse jogo de texturas juntas é para que todos entendam melhor como funciona a posição da textura
no rotina de desenho. 0 (zero) equivale á 0 na textura e 1 equivale ao tamanho total, ok?

A rotina de desenho é:



draw_primitive_begin_texture(kind,texid) = para começar o desenho. Confira e lista de kinds (tipos de formas) que eu fiz no tópico acima. Para obter o id da textura, leia o item 1.

draw_vertex_texture(x,y,xtex,ytex) = para adicionar vértices (cantos) ao desenho.

draw_primitive_end() = para finalizar o desenho.


1 - Carreguem essa textura para uma sprite nova e coloquem o nome de gmbr_textura.

2 - Criem um objeto qualquer em uma nova sala e em seu evento "Create" coloquem:


Código:
textura:=sprite_get_texture(gmbr_textura,0);
texture_preload(textura);


Agora no seu evento "Draw" ponham o código respectivo para cada textura:



Para desenhar a clássica parede de tijolos:

Código:
texture_set_repeat(true);
texture_set_interpolation(false);
texture_set_blending(false);

draw_primitive_begin_texture(pr_trianglestrip,textura);
draw_vertex_texture(20,mouse_y,0,0);
draw_vertex_texture(400,mouse_y,0.5,0);
draw_vertex_texture(20,400,0,0.5);
draw_vertex_texture(400,400,0.5,0.5);
draw_primitive_end();




Usando a textura de ladrilhos:

Código:
texture_set_interpolation(false);
texture_set_blending(false);

draw_primitive_begin_texture(pr_trianglestrip,textura);
draw_vertex_texture(20,mouse_y,0.5,0);
draw_vertex_texture(400,mouse_y,1,0);
draw_vertex_texture(20,400,0.5,0.5);
draw_vertex_texture(400,400,1,0.5);
draw_primitive_end();



Agora a textura de pedra:

Código:
texture_set_interpolation(false);
texture_set_blending(false);

draw_primitive_begin_texture(pr_trianglestrip,textura);
draw_vertex_texture(20,mouse_y,0,0.5);
draw_vertex_texture(400,mouse_y,0.5,0.5);
draw_vertex_texture(20,400,0,1);
draw_vertex_texture(400,400,0.5,1);
draw_primitive_end();


A textura de barro (que parece argila e tem sabor de pedra-sabão - lembram-se de Chaves?)


Código:
texture_set_interpolation(false);
texture_set_blending(false);

draw_primitive_begin_texture(pr_trianglestrip,textura);
draw_vertex_texture(20,mouse_y,0.5,0.5);
draw_vertex_texture(400,mouse_y,1,0.5);
draw_vertex_texture(20,400,0.5,1);
draw_vertex_texture(400,400,1,1);
draw_primitive_end();

Galera, lembrem-se que dúvidas também são importantes! Poste-as aqui no fórum!!! Às veses as respostas demoram por falta de conhecimento, mas não se esqueçam de que o objetivo principal do fórum é esse: compartilhar idéias, não cobrá-las! Ok?

"Uma dúvida só é maligna quando ao invés de incentivar a busca por conhecimento, incentiva o desagrado!"

Ha! Uma boa notícia: Fiquei sabendo que jogos como Mario Kart, foram feitos usando-se texturas e rotinas de desenho bem parecidas com estas. O Reddragon tinha razão: os menos atentos podem não perceber um efeito drawner que imita um 3d!

Boa sorte e até mais!!!



Convidad
Convidado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum