[Direct3D] alpha blending : faire apparaitre une image progressivement

alpha blending : faire apparaitre une image progressivement [Direct3D] - Programmation

Marsh Posté le 25-06-2002 à 13:08:10    

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?


Message édité par Ace17 le 25-06-2002 à 14:43:23
Reply

Marsh Posté le 25-06-2002 à 13:08:10   

Reply

Marsh Posté le 25-06-2002 à 14:30:00    

Ca t'arrive de répondre à tes mails? ;)


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 25-06-2002 à 14:38:46    

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?


Message édité par ITM le 25-06-2002 à 14:39:48

---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 25-06-2002 à 14:43:36    

Tu sais lire un titre de topic? ;)


Message édité par Ace17 le 25-06-2002 à 14:43:44
Reply

Marsh Posté le 25-06-2002 à 14:45:02    

Bien sur, c'était juste pour t'ennerver que j'ai fais tout ça!
T'as vu mon mail ou pas alors?


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 25-06-2002 à 14:47:32    

LOL j'avais compris c'est bon, je t'ai répondu

Reply

Marsh Posté le 25-06-2002 à 14:48:21    

Bon, je t'ai Rerépondu alors  :)


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 25-06-2002 à 14:48:56    

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

Reply

Marsh Posté le 25-06-2002 à 15:53:34    

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

Reply

Marsh Posté le 25-06-2002 à 16:06:39    

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

Reply

Marsh Posté le 25-06-2002 à 16:06:39   

Reply

Marsh Posté le 25-06-2002 à 16:21:31    

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

Reply

Marsh Posté le 25-06-2002 à 16:31:49    

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

Reply

Marsh Posté le 25-06-2002 à 16:34:22    

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)
 
 

Reply

Marsh Posté le 25-06-2002 à 16:44:02    

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:


Message édité par Ace17 le 25-06-2002 à 16:44:34
Reply

Marsh Posté le 25-06-2002 à 17:48:24    

Ace17, réponds à mon mail STP
 :sarcastic:


---------------
iteme.free.fr | Mon feedback
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed