Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] Introdução ao Pixel Bender e Shader para Flash Player

Recommended Posts

Este artigo vai abordar a sintaxedo Pixel Bender e como escrever seus próprios arquivos Pixel Bender, além de como carregar arquivos Pixel Bender no Flash e usá-los de diferentesmaneiras.

 

 

Começando com o Pixel Bender

O FlashPlayer 10 veio com novas classes para carregar e para usar os arquivos Pixel Bendernos nossos aplicativos Flash. Neste artigo, iremos dar uma olhada na sintaxedo Pixel Bender e como escrever seus próprios arquivos Pixel Bender. Iremos vertambém como carregar arquivos Pixel Bender no Flash e usá-los de diferentesmaneiras.

 

Primeiramente,você precisa fazer o download do Pixel Bender Toolkit aqui. O Pixel Bender Toolkit vem com um conjunto de filtros PixelBender, então sinta-se à vontade para estudá-los e para compreender melhor a sintaxedo Pixel Bender. Você também pode procurar na web por filtros adicionais doPixel Bender.

 

Neste artigo, criaremos alguns filtros simples com o Pixel Bender Toolkit e maistarde iremos utilizar filtros já existentes. Então, vamos começar.

 

Inicie o Pixel Bender Toolkit e escolha "NewKernel", e um arquivo kernel completamente novo de trabalho éautomaticamente criado para você. Você já pode executar esse filtro e provavelmente será requisitado para carregar uma imagem e, depois disso, o filtro será executado. Claro que a única coisa que esse filtro está fazendoaté agora é copiar cada pixel da base da imagem para a imagem de output, entãoele não é tão útil, mas vamos dar uma olhada nele assim mesmo. Primeiro, vocêtem a descrição do kernel:

 

kernel NewFilter

< namespace : "Your Namespace";

vendor : "Your Vendor";

version : 1;

description : "your description";

>Você pode nomear o seufiltro aqui, e pode também inserir outras informações, como a versão do filtro,sua descrição e assim por diante. Em seguida:

 

input image4 src;

output pixel4 dst;Você especifica um input dotipo image4 (4 canais) e o nome ?src?. O filtro irá usar esse input como base.Você também especifica um output do tipo pixel4 (4 canais) e o nome ?dst?. Ofiltro passará o resultado do seu cálculo para esse output. Então:

 

 

void

evaluatePixel()

{

dst = sampleNearest(src,outCoord());

}Essa função (evaluatePixel)vai rodar uma vez para cada elemento (pixel) dos seus dados de input. Ométodo sampleNearest retorna o valor de um pixel, e esse valor éatribuído ao output ?dst?. O método sampleNearest pega a fonte (no nosso caso,uma fonte image4), e um conjunto de coordenadas (outCoord() retorna as coordenadasdo elemento atual ou pixel). Se você passar uma image4, você terá de volta umvalor pixel4; se você passasse uma image3, você iria ter um pixel3, e assim pordiante. O número determina quantos valores você recebe, ou tem que configurar,por exemplo:

 

float myfloat = 1.0;//one value

float2 myotherfoat = float2(1.0,1.0);//two values

float3 mythreefoat = float3(1.0,1.0,1.0);//three values

float4 myfourfoat = float4(1.0,1.0,1.0,1.0);//four valuesFazer type cast é possível,claro, se os types forem compatíveis, como de .int para float, por exemplo. Éóbvio que se você tentar passar um pixel 3 para uma image4, você terá um erro,então preste atenção nisso. Vamos modificar nosso código de modo que nossooutput fique diferente:

 

dst = pixel4(sin(float4(sampleNearest(src,outCoord()))));Você deve ter uma pequenaalteração no brilho da sua imagem. Você provavelmente sabe o que o método sinfaz. Aqui moldamos nosso resultado sampleNearest em um float4 (então fizemos otype cast de um pixel4 para float4) para podermos aplicar o método sin, entãoé claro que fizemos o type cast de volta para pixel 4 para conseguir atribuir oresultado ao nosso output. Você pode experimentar com os inúmeros métodosmatemáticos e ver os resultados que você obtém. Tente este, por exemplo:

 

dst = pixel4(sqrt(float4(sampleNearest(src,outCoord()))));Além disso, nós poderíamosseparar cada pixel e aplicar um cálculo em cada um deles:

 

 

pixel4 temp = sampleNearest(src,outCoord());

dst = temp;De volta ao início, masaqui temos nossos pixels armazenados em uma variável, de modo que podemosacessá-los individualmente. Então, vamos fazer isso agora:

 

pixel4 temp = sampleNearest(src,outCoord());

temp.r = 0.0;

dst = temp;Aqui nósbasicamente desligamos o canal vermelho de modo que todo o vermelho saiu danossa imagem. Você poderia aplicar inúmeras operações matemáticas nesses pixelse obter resultados incríveis. Claro que o seu nível em matemática irádeterminar sua habilidade em criar filtros complexos, mas isso cabe a vocêdescobrir. Agora é hora de vermos o que podemos fazer com filtros Pixel Benderno Flash, e pelo caminho iremos olhar para mais códigos Pixel Bender.

 

?

 

Texto original disponível em http://www.actionscript.org/resources/articles/876/1/Introduction-to-Pixel-Bender-and-Shader-for-Flash-Player-10/Page1.html

 

 

 

http://imasters.com.br/artigo/21449/flash/introducao-ao-pixel-bender-e-shader-para-flash-player-10

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.