|
 | | |
|
| |  |   |  |  | |  |  | |  |  | |  |  | |  | |
 | | | |
Olá pessoal.
Eu estou com algumas duvidas em relação a texturas 2d no xna.
Eu queria saber como é possivel aplicar alguns efeitos nas texturas, entre eles: zoom na direção x ou y, saturação, brilho, opacidade.
Obrigado desde já! |
|
|
|  |  | | |
| Re: Efeitos em Texturas 2D |
|
|
felipehenrique escreveu
Olá pessoal.
Eu estou com algumas duvidas em relação a texturas 2d no xna.
Eu queria saber como é possivel aplicar alguns efeitos nas texturas, entre eles: zoom na direção x ou y, saturação, brilho, opacidade.
Obrigado desde já!
|
Olá,
em relação aos efeitos que você citou, saturação e brilho podem ser feitos através de algum shader.
Já opacidade, pode ser definida na hora que vc renderiza a textura. Digamos que queremos renderizar uma textura com 50% de opacidade, a gente poderia renderizar assim:
spriteBatch.Draw(
this.texture, Vector2.Zero, new Color(1f, 1f, 1f, 0.5f));
Sobre zoom na direção x ou y, o que você quis dizer com isso? Você quer redimensionar uma textura na direção x ou y?
No mais, tem um artigo sobre efeitos com imagens aqui no SharpGames, dá uma olhada: http://www.sharpgames.net/Artigos/Artigo/tabid/58/selectmoduleid/376/ArticleID/1075/reftab/54/Default.aspx
[]s @lucianoJoseBr
My Blog: http://lucjose.wordpress.com |
|
|
|  |  | | |
| Re: Efeitos em Texturas 2D |
|
|
Zoom obviamente se tu estiver trabalhando com quads texturizados ( usando 3 dimensões ) fazendo um 2d sidescroller, por exemplo, tu vai querer aproximar a câmera na direção do eixo Z.
Agora por exemplo , se tu fores utilizar spritebatch, trabalhando apenas com 2 eixos, tu vai querer calcular algo tipo assim:
nova posicao = zoom * ( posicao do objeto - centro da tela ) + centro da tela.
onde todas as variáveis acima são vetores bidimensionais.
onde zoom é a escala ( vector2 ) que equivale a aproximação da "câmera" em relação ao objeto.
centro da tela seria a referência do zoom. em que foco ele será aplicado (não precisa nescessáriamente ser aplicado ao centro da tela).
Depois para aplicar o tamanho certo ao objeto aproximado, basta multiplicar as dimensões da sua textura ( ou a escala ) pelo vetor de zoom.
Shaders de saturação, etc... são explicados nesse link :
http://www.facewound.com/tutorials/shader1/
|
|
|
|  |  | | |
| Re: Efeitos em Texturas 2D |
|
|
Luciano:
Valeu cara o da opacidade deu certinho.
Sim o que eu queria serio tipo redimensionar mesmo, mas se eu redimensionar o rectangle que está a textura a imagem fica embaçada, e não é esse o efeito que eu quero, queria que ela faça o zoom a nivel de pixel ( em que quando estiver muito proximo se dê para ver os pixels da imagem).
E sim vou dar uma olhada no artigo sobre efeitos.
lcolnaghi:
Muito boa a sua ideia, vou testar aqui.
E sim obrigado por me indicar o tutorial. |
|
|
|  |  | | |
| Re: Efeitos em Texturas 2D |
|
|
Opa felipehenrique, quanto a tua resposta ao Luciano, utilizando Spritebatches, uma solução seria ter uma textura maior ( e mais pesada ) para o redimensionamento.
Mas enfim, é implementado no XNA por padrão interpolação bilinear quando é calculado a escala no spritebatch. Isso causa estes efeitos ( embaçamento ) que tu no caso não quer no teu Game, mas são calculados por as texturas ficarem bem mais bonitas e ajudar com anti-aliasing : ) . Mas para tu remover essas interpolações e técnicas de combinação de pixels - mostrando assim os pixels da imagem e não o "embassado", tu deves trocar o MagFilter, para por Ponto ou Nenhum ( que dão na mesma ), da seguinte forma :
GraphicsDevice.SamplerStates[0].MagFilter = Microsoft.Xna.Framework.Graphics.TextureFilter.None; // ou .Point
|
|
|
|
|  |  | |  |  | |  |  | |  |
|
|
| | |
|
|
|  |
 |  |
|