begin process at 2008 07 19 16:31:04
1 212 905 membres
227 nouveaux aujourd'hui
14 165 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXEMPLES D'UTILISATION DES PIXELS SHADERS 2.0 AVEC DIRECTX 9.0


Information sur la source

Catégorie :DirectX Classé sous : pixel, shader, directx, effets, texture Niveau : Initié Date de création : 02/12/2005 Date de mise à jour : 03/12/2005 22:47:07 Vu / téléchargé: 22 537 / 1 372

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

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.
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

03 décembre 2005 21:06:52 :
Modification de la capture d'écran qui était un affreuse : mélange des différents rendus. Elimination de rendus trop pourris, ajouts de nouveaux rendus plus interessants ou du moins impressionnants. Meilleure rédaction des descriptions.
03 décembre 2005 22:47:08 :
Désolé, j'avais oublié de renommer le exe.
  • signaler à un administrateur
    Commentaire de Galmiza le 02/12/2005 17:59:25

    Je ne l'ai pas dit explicitement mais le programme ne fonctionnera que si vous avec DirectX 9.0 ou supérieur et une carte graphique programmable version minimale 2.0 pour les pixel shaders.

  • signaler à un administrateur
    Commentaire de Galmiza le 05/12/2005 11:38:28

    Vous êtes plus de 300 à avoir survolé cette source, si elle ne vous plait pas ou même si elle vous plait, n'hésitez pas à laisser un commentaire ! Allez un p'tit commentaire pour me faire plaisir :).
    Dîtes-moi si l'exe tourne chez vous et postez (si vous le désirez) le nom de votre carte graphique.
    Faîtes-moi part des éventuelles erreurs rencontrées lors de la compilation de la source.

    Merci

  • signaler à un administrateur
    Commentaire de Saros le 05/12/2005 16:45:11

    L'exe tourne très bien
    Lors de la compilation, il me dit que la Fonction Draw :
    m_pSprite->Draw(m_ppTextures[0], // will be send into slot 0
    NULL, // point
    &D3DXVECTOR2(1.0f,1.0f), // scale
    NULL,
    0.0f,
    NULL, // position
    0xFFFFFFFF );
    ne prend pas 7 paramètres...
    Par ailleurs il ne me fait pas d'autres erreurs de compilation.

  • signaler à un administrateur
    Commentaire de Galmiza le 05/12/2005 20:09:39

    Merci pour le commentaire !

    Le problème de Draw vient d'une différence de version entre mon SDK de directX et le tien.
    Draw ne prend plus (ou ne prenait pas encore) 7 paramètres, regarde dans MSDN la doc sur la fonction Draw pour ta version de SDK.
    Ou plus simplement regarde l'aide "DirectX9_c.chm" du répertoire "\Doc\DirectX9" là où tu as installé DirectX SDK.
    DirectXGraphics -> Reference -> DirectD3 Extension (D3DX) C/C++ Reference -> Interfaces -> ID3DXSprite -> Draw
    Tu auras les paramètres de la fonctions Draw, donc leur nombre, mais aussi des explications sur les valeurs qu'ils doivent/peuvent prendre.

    Encore merci ;)

  • signaler à un administrateur
    Commentaire de rei3 le 06/12/2005 12:41:44

    Ah bah sur ma GF 7800GTX ca troune nikel :p

  • signaler à un administrateur
    Commentaire de simpat le 06/01/2007 12:20:33

    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 ??

  • signaler à un administrateur
    Commentaire de tit_toinou le 30/12/2007 22:02:27

    Salut,
    sur ma ATI X1950 Pro ca tourne :)
    J'adore les effets 5,6 et 8 !
    J'en reveux..
    A quand les prochains ?

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS