2010-11-25 20 views
2

Salut à tous, Je commence tout juste à utiliser XNA 4.0 pour Windows Phone 7 et je cherchais des informations sur la façon d'obtenir un effet de flou sur un Texture2D? D'après ce que j'ai compris, nous ne pouvons pas utiliser les shaders sur la plate-forme WP7 et je trouve très difficile de trouver des informations sur ce sujet. Un grand merci à l'avance, anton.Windows Phone 7/XNA 4 - Effet de flou de texture

+0

De quel type de flou avez-vous besoin? Pouvez-vous flouter juste la texture, ou avez-vous besoin de brouiller la forme elle-même? Est-il correct de pré-calculer le flou? –

+0

Idéalement, si je pouvais créer un flou directionnel qui serait génial. Essentiellement, c'est pour une classe SpriteSheet que j'ai créée, j'ai donc un Texture2D et j'utilise draw avec un sourcerect et position Rectangles. Est-il possible de créer un flou à la volée sans pré-calcul? – antonmills

Répondre

1

En théorie, oui. Cependant, c'est une tâche intensive du processeur. Si vous prenez les données de pixel, collez-les dans un bitmap, et parcourez les pixels de C# comme un shader le ferait, alors vous pouvez obtenir le même effet. Tout ce que vous feriez alors est de prendre les données de couleur à partir de l'image bitmap, de les récupérer dans la texture, puis de les redessiner. Mais étant donné que vous auriez à faire cela pour chaque appel de tirage, ce sera un énorme coup de pied dans les dents pour le processeur de téléphones. Je n'ai pas mon code à portée de main, mais j'ai utilisé cette approche pour un certain nombre de pseudoshaders. Ce n'est pas efficace, mais c'est efficace lorsqu'il est utilisé avec parcimonie.

0

Une autre méthode assez peu coûteuse de "flou directionnel" des sprites consiste à conserver une courte file d'attente FIFO de l'endroit où l'image-objet a été (sa position) au cours des dernières mises à jour. C'est un lieu "sentier de l'histoire". Ensuite, dessinez le sprite à ces positions dans l'ordre chronologique inverse (le plus ancien en premier), avec un masque de couleur qui commence presque transparent (pour le membre le plus ancien de l'historique), devient moins transparent pour chaque position postérieure dans l'historique et est blanc pour la position actuelle du sprite. Cette méthode devient plus coûteuse (prend du temps) avec des traces d'histoire plus grandes. Il peut aussi ne pas produire un bon flou lorsque l'objet bouge trop vite - car il y aura trop d'espace entre la position actuelle et la précédente. Dans ce cas, vous pouvez interpoler les positions les plus proches de la position actuelle pour obtenir un meilleur effet de flou. Le résultat final serait probablement considéré comme une image fantôme plutôt qu'un flou, mais si c'est tout ce dont vous avez besoin, c'est assez facile à mettre en œuvre.