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

  FORUM HardWare.fr
  Programmation

  [Direct3D] alpha blending : faire apparaitre une image progressivement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Direct3D] alpha blending : faire apparaitre une image progressivement

n°165366
Ace17
Posté le 25-06-2002 à 13:08:10  profilanswer
 

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
mood
Publicité
Posté le 25-06-2002 à 13:08:10  profilanswer
 

n°165430
ITM
Avatar peint à la main
Posté le 25-06-2002 à 14:30:00  profilanswer
 

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


---------------
iteme.free.fr | Mon feedback
n°165444
ITM
Avatar peint à la main
Posté le 25-06-2002 à 14:38:46  profilanswer
 

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
n°165449
Ace17
Posté le 25-06-2002 à 14:43:36  profilanswer
 

Tu sais lire un titre de topic? ;)


Message édité par Ace17 le 25-06-2002 à 14:43:44
n°165453
ITM
Avatar peint à la main
Posté le 25-06-2002 à 14:45:02  profilanswer
 

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
n°165456
Ace17
Posté le 25-06-2002 à 14:47:32  profilanswer
 

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

n°165461
ITM
Avatar peint à la main
Posté le 25-06-2002 à 14:48:21  profilanswer
 

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


---------------
iteme.free.fr | Mon feedback
n°165464
chrisbk
-
Posté le 25-06-2002 à 14:48:56  profilanswer
 

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

n°165538
LeGreg
Posté le 25-06-2002 à 15:53:34  profilanswer
 

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

n°165553
LeGreg
Posté le 25-06-2002 à 16:06:39  profilanswer
 

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

mood
Publicité
Posté le 25-06-2002 à 16:06:39  profilanswer
 

n°165569
chrisbk
-
Posté le 25-06-2002 à 16:21:31  profilanswer
 

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

n°165579
LeGreg
Posté le 25-06-2002 à 16:31:49  profilanswer
 

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

n°165585
chrisbk
-
Posté le 25-06-2002 à 16:34:22  profilanswer
 

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)
 
 

n°165597
Ace17
Posté le 25-06-2002 à 16:44:02  profilanswer
 

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
n°165682
ITM
Avatar peint à la main
Posté le 25-06-2002 à 17:48:24  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Direct3D] alpha blending : faire apparaitre une image progressivement

 

Sujets relatifs
Lien sur une image flash???[Visual C++] image de demarrage d'un programme
[HTML] Ecrire du texte sur une image ? .... ca avance !Delphi : Peut-on charger une image sur le fond d'une fiche ?
[php]fonction pr faire un dégradé(image) ?Image de haut en bas
Javascript : un lien pour afficher une image parmi une liste d'imagesMettre une image en fond de form + pb DBlookupCombobox [RESOLU]
background image probleme avec différentes résolutons..... svpEntendre du son en cliquant et image changeante
Plus de sujets relatifs à : [Direct3D] alpha blending : faire apparaitre une image progressivement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR