Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3117 connectés 

 


Dernière réponse
Sujet : [Direct3D] alpha blending : faire apparaitre une image progressivement
ITM Ace17, réponds à mon mail STP
 :sarcastic:

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
ITM Ace17, réponds à mon mail STP
 :sarcastic:
Ace17

legreg a écrit a écrit :

tu ne passes pas une couleur diffuse en RGBA  
dans ton format de vertex?
 
A mon avis le facteur que tu cherches c'est l'alpha du vertex
modulé par l'alpha de texture (s'il existe).




 
Bien joué, c'était ca
Maintenant comme c'est bôôôôôôôôôô!!!  :love:  
:hello:

chrisbk

legreg a écrit a écrit :

non ok ca marche,  
je me demandais juste comment
c'etait supporté par les hardwares?
tu as fait des tests?
 
LeGreg
 




 
alors la, je te concede que je n'en sais rien du tout :D  
Bon,partant du principe qu'il etait deja la dans DX7, on peut dire que les geforce le font :D En dessous, no idea, mais je suppose que la TnT oui
(enfin quoi, y'a meme pas a interpoler ni rien du tout, c juste une bete constante a utiliser partout :D)
 
 

LeGreg non ok ca marche,  
je me demandais juste comment
c'etait supporté par les hardwares?
tu as fait des tests?
 
LeGreg
chrisbk

legreg a écrit a écrit :

 
 
je crois que texturefactor c'est overkill
et je ne suis pas sur que ce soit bien utilisable
sur des hardware un peu ancien  
 
LeGreg
 




 
comment cela, overkill ?
 
Perso pour faire disparaitre un objet progrssivement, c le tfactor que j'utilise

LeGreg

chrisbk a écrit a écrit :

Connais pas du tout D3DXSprite, mais en D3D normal tu a le textureFactor qui correspond a ce que tu veux faire ( tu le set avec setRenderState)




 
je crois que texturefactor c'est overkill
et je ne suis pas sur que ce soit bien utilisable
sur des hardware un peu ancien  
 
LeGreg

LeGreg tu ne passes pas une couleur diffuse en RGBA  
dans ton format de vertex?
 
A mon avis le facteur que tu cherches c'est l'alpha du vertex
modulé par l'alpha de texture (s'il existe).
 
LeGreg
chrisbk Connais pas du tout D3DXSprite, mais en D3D normal tu a le textureFactor qui correspond a ce que tu veux faire ( tu le set avec setRenderState)
 
ensuite c'etait question de mettre les stageState correct (faire alphaArg1 = textureFactor et alpha.op = useArg1 ) et d'activer l'alphaBlending (setRenderState)
 
sais pas si ca va t'aider, mais bon.........
ITM Bon, je t'ai Rerépondu alors  :)
Ace17 LOL j'avais compris c'est bon, je t'ai répondu
ITM Bien sur, c'était juste pour t'ennerver que j'ai fais tout ça!
T'as vu mon mail ou pas alors?
Ace17 Tu sais lire un titre de topic? ;)
ITM Pas bien compliqué avec Allegro:
 

Code :
  1. //on crée un buffer de la taille de l'écran (ici buffer)
  2.    buffer = create_bitmap(SCREEN_W, SCREEN_H);
  3.    //on crée un BITMAP qui contient l'image (ici bmp)
  4.    bmp = load_bitmap("L'image" );
  5.    for (alpha = 0; alpha < 256; alpha += 8) {
  6.       //on efface le buffer
  7.       clear_bitmap(buffer);
  8.       set_trans_blender(0, 0, 0, alpha);
  9.       draw_trans_sprite(buffer, bmp, (SCREEN_W - bmp->w)/2, (SCREEN_H - bmp->h)/2);
  10.       vsync(); //pas obligatoire mais bon...
  11.       //on copie le resultat sur l'écran
  12.       blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
  13.    }
  14.    //bon, après il faut virer le buffer et l'image crées
  15.    destroy_bitmap(buffer);
  16.    destroy_bitmap(bmp);


Pas testé mais y a pas trop de raison. Au moins, tu vois que une bonne librairie, ca a du bon, non?

ITM Ca t'arrive de répondre à tes mails? ;)
Ace17 Comment est il possible de faire apparaitre une image progressivement? Au début, qu'elle soit completement transparente et qu'a la fin completement opaque. Je pense pouvoir faire ca en adaptant progressivement la composante alpha de chaque texel, mais ca implique de locker la surface pour aller écrire dedans et ca prend du temps.  
 
Mais j'ai trouvé ca:  
[citation]
There are two ways to take advantage of alpha values. First, you can create your source graphics with an alpha component, allowing you to make a single bitmap with varying degrees of transparency throughout the image. Many graphics editors support alpha values, and you'll need to save in a file format that stores this data (.PNG or .TGA, for example). When you load your image into a texture which has an alpha value in its format, the alpha information is maintained. Then, when you use ID3DXSprite::Draw(), the alpha value is used to decide how to blend your image with the background graphics. The second way to take advantage of alpha values is to use the Color parameter of the ID3DXSprite::Draw() function, which "modulates" the color and alpha channels by the value provided. Ordinarily, you would specify 0xFFFFFFFF for this value to get a standard blit. By changing this to 0x80FFFFFF, you will draw your image at 50 percent transparency. It is also possible to change the other bytes to affect the color of your drawn image, making it very easy and fast to draw a single object in a variety of color shades.
[/citation]
 
Manifestement ID3DXSprite arrive a faire ca, comment fait-il?
J'ai trouvé ca dans le SDK de DirectX :
FinalColor = TexelColor × SourceBlendFactor + PixelColor × DestBlendFactor
A supposer que ID3DXSprite n'utilise pas lock, c'est donc qu'il existe un autre facteur , tel que :  
 
FinalColor = TexelColor × SourceBlendFactor × facteur + PixelColor × DestBlendFactor
 
Comment modifier ce facteur, s'il existe?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)