Exemples d'utilisation des pixels shaders 2.0 avec directx 9.0

Soyez le premier à donner votre avis sur cette source.

Vue 44 088 fois - Téléchargée 1 937 fois

Description

Voici quelques exemples d'utilisation des pixel shaders.
Ce programme initialise succintement direct3D et ses objets, et montre comment créer et charger dans la mémoire vidéo des pixels shaders.
Neuf (F1 -> F9) effets graphiques montrent la puissance des shaders.

Un pixel shader est un programme executable par la carte graphique. Après avoir déterminé les pixels à modifier sur le backbuffer suite au rendu d'une face ou d'un sprite, la carte graphique appelle pour CHAQUE pixel le pixel shader. Celui-ci contrôle donc intégralement la couleur de ces pixels !

Je vous laisse analyser les codes en assembleur et leurs commentaires. Sachez juste qu'un registre assembleur est un vecteur de 4 floats, chacune des composantes est accessible dans l'ordre par .x .y .z et .w ou .r .g .b .a (respectivement équivalents). Les ri sont les registres utilisables dans le code, les ti sont les registres envoyés aux pixels shaders par les vertex shaders ou par les fonctions comme le draw du sprite, les si correspondent aux slots pour les textures (SetTexture(3, pTexture) dans le code en C++. La texture sera accessible par le pixel shader via le slot s3).

F1: texture, pixel = pixel aux coordonnées uv du backbuffer à la couleur de celui de la texture aux mêmes coordonnées texture uv
F2: blur, pixel = moyenne de 4 pixels qui l'entourent (pas forcement les voisins immédiats, la coordonnées x de la souris modifie la distance du pixel aux 4 autres)
F3: texture coordinates, pixels = couleur équivalente aux coordonnées de la souris ('rg'ba == 'xy'zw)
F4: niveaux de gris, pixel = 0.299 * R + 0.587 * G + 0.114 * B sur chacune de ses composantes rgb du pixel (de la texture aux même coord uv)
F5: idem, mais dépend de la distance du pixel au curseur
F6: mix de textures, la position x du curseur modifie l'importance d'une texture par rapport à l'autre
F7: saturation de couleur : interpolation linéaire saturée (coef pas dans 0-1) entre couleur du pixel et son gris
F8: saturation de lumière, plus la souris est proche du pixel, plus celui-ci est eclairé
F9: noir et blanc, la position x du curseur modifie le niveau de comparaison de la couleur pour determiner noir ou blanc

Conclusion :


Ce programme ne fonctionne que sur les ordinateurs possédant directX 9 et une carte vidéo à shader programmable 2.0 (exemple ati radeon 9600 ou sup).
Si la compilation échoue malgré la compatibilité de votre carte vidéo, c'est à cause de la version du SDK de DirectX, je n'ai pas la dernière. Aidez-vous du debugger pour connaître les modifications (très légères généralement par exemple nombre de paramètres d'une fonction directX) à apporter pour pouvoir compiler correctement.

Merci de laisser des commentaires !
N'hésiter pas non plus à proposer des effets graphiques que je posterai aussi vite que possible.
Les effets ne se font qu'en une passe (1 seul appel de pixel shader). Je fais une version à plusieurs passes et je mets à jour le source si ça ne le fait pas trop gonfler.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
dimanche 12 juillet 2009
Statut
Membre
Dernière intervention
12 juillet 2009

salut j"ai télécharger le zip et je ne sais pas quesque je vais faire
stp aider moi ou je vais lé mettre
Messages postés
12
Date d'inscription
dimanche 11 avril 2010
Statut
Membre
Dernière intervention
23 juin 2017

Désolé, j'avais oublié de renommer le exe c le quel quand doit changer
g telecharger le zip que doit faire merci
Messages postés
1
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
23 août 2008

ou dois-je placer ce fichier ?
merci
Messages postés
49
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
16 juillet 2008

Salut,
sur ma ATI X1950 Pro ca tourne :)
J'adore les effets 5,6 et 8 !
J'en reveux..
A quand les prochains ?
Messages postés
5
Date d'inscription
jeudi 22 janvier 2004
Statut
Membre
Dernière intervention
6 janvier 2007

C'est vraiment super.
Est-ce qu'il est possible d'utiliser ls pixels shadow sur une vidéo ?? Faire une sorte d'effet d'eau, ce genre de choses ??
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.