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

  FORUM HardWare.fr
  Programmation

  dx8 sdk : shaders / techniques : blem de blending

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

dx8 sdk : shaders / techniques : blem de blending

n°61333
bjone
Insert booze to continue
Posté le 24-09-2001 à 21:01:19  profilanswer
 

voila, je me suis fait un ciel étoilé en point sprites, je veux blender 2 textures par point sprite avec le coef de blending qui bouge ds le temps.....
 
je joue donc avec le texturefactor.......
 
voici le code c++:
 
Stars::RenderStars(LPDIRECT3DDEVICE8 D3D_Device)
{  
 StarsEffect.Interface->SetTexture(MAKEFOURCC('t','S','R','0';),StarsTexture[Star0]);
 StarsEffect.Interface->SetTexture(MAKEFOURCC('t','S','R','1';),StarsTexture[Star1]);
   
 DWORD factor;
 
 factor=(((DWORD)((float)(sin(w)+1.)*255./2.))<<24
)+0x0ffffff;
 
 w+=0.2;
 
 D3D_Device->SetRenderState(D3DRS_TEXTUREFACTOR,fa
ctor);
 
 UINT Passes,p;
   
 StarsTechnique->Begin(&Passes);  
 
 for(p=0 ; p < Passes ; p++)
 {
 
  StarsTechnique->Pass(p);
 
  Render(D3D_Device,0,numPSprites);  
 }
 
 StarsTechnique->End();
}
 
le StarsEffect.Interface, point l'interface d'effet ID3DXEffect
le StarsTechnique est la technique choisie (la 0)......
le TextureFactor varie donc de 0x00ffffff à 0x0ffffffff (y'a que le alpha que je fait bouger)
 
le fichier de technique que j'utilise:
 
texture tSR0;
texture tSR1;
 
 
technique T0
{
    Lighting       = False;
    SpecularEnable = False;
    ZEnable = False;
 
 pass P0
    {        
 
  Texture[0] = <tSR0>;  
  Texture[1] = <tSR1>;    
 
  ColorArg1[0]  = Texture;  
  ColorArg2[0]  = Diffuse;
  ColorOp[0]    = Modulate;
 
  AlphaArg1[0] = Texture;
  AlphaArg2[0] = Diffuse;
                AlphaOp[0]   = Modulate;  
 
  ColorArg1[1] = Texture;  
  ColorArg2[1] = Current;
  ColorOp[1]   = BlendFactorAlpha;  
         
                AlphaArg1[1] = Texture;
  AlphaArg2[1] = Current;
  AlphaOp[1]   = BlendFactorAlpha;
 
  ColorOp[2] = Disable;
  AlphaOp[2] = Disable;  
    }
 
 
}
 
le pb, c'est que lorsque je mets les deux textures dans la passe 0, ça varie entre la première texture et du noir...
et je commente la déclaration d'utilisation de la deuxième texture, j'ai que la premiere sans variation (logique puisque y'a plus qu'une texture, le deuxième stage est ignoré)
 
y'a t-il un restriction avec les points sprites qui empèchent d'utiliser deux textures ?  
 
j'ai l'impression que c'est le blendfactoralpha qui alpha qui passe po......
 
ou alors y'a méprise entre les ColorArg1/2/0 (j'ai vu qu'il y a le 0, mais y causent pas dans le sdk, a part le LERP ???)
 
Qu'estcequichie ?

mood
Publicité
Posté le 24-09-2001 à 21:01:19  profilanswer
 

n°61354
bjone
Insert booze to continue
Posté le 24-09-2001 à 23:28:44  profilanswer
 

ben personne ne joue avec le dx8 ????
tout li monde il est opengle ?

n°61387
chrisbk
-
Posté le 25-09-2001 à 10:49:06  profilanswer
 

Huh non on fait pas tous OGL (dieu m'en garde :D )
 
ya' ton ColorOp[1]   = BlendFactorAlpha;  
qui me plait que moyen je dois dire.
 
quand ton factorAlpha = 0 alors tu va blender la couleur de ta texture avec 0. donc du noir (logiquement, comme je vois ca)
 
fodrait juste que tu bricoles la composante alpha et que tu laisse la carte faire le blending entre les deux avec ce alpha.
 
bref, fo bricoler :)

n°61391
chrisbk
-
Posté le 25-09-2001 à 10:54:37  profilanswer
 

arf non,j'ai rien dit :D  
j'avais pas vu que t'avaismis le reste a 0xffffff
 
donc si il utilise bien ce bout la (et pas la valeur alpha) devrait pas avoir de soucis
m'enfin je sais tjs pas si cette operation necessaire....

n°61392
bjone
Insert booze to continue
Posté le 25-09-2001 à 11:00:22  profilanswer
 

ben j'ai cru comprendre dans le sdk que le blendfactoralpha + jouer sur le texturefactor permettait de contrôller la proportion de blending entre les deux arguments.....
 
 
et dans l'example "MFC Tex", en mettant les mêmes arguments et opérateurs, ça marche comme je veux !!!!!!!!!!!!
en jouant sur le blendfactor !!!
 
stage 0:            stage 1:
 
texture             texture
modulate            blend factor
diffuse             current
 
texture             texture
modulate            blend factor
diffuse             current
 
 
avec le diffuse, je joue bien sur la teinte de la texture du stage 0
avec le blendfactor, en changeant l'alpha (octet de poids fort), le mélange se dose bien !!! (comme je veux pour le moment)
 
alors, là ou il pourrait y avoir méprise:
 
l'opérateur "Blend Factor" ne correspond pas au "BlendFactorAlpha"
 
ou la constante "BlendFactor" ne correspond au "D3DRS_TEXTUREFACTOR"
 
bon, je vais zieuter le source du MFC Tex...
ça devrait expliquer le pourquoi du comment......

n°61398
bjone
Insert booze to continue
Posté le 25-09-2001 à 11:11:10  profilanswer
 

autre question accessoire (je sais pas si t'as essayé),
j'ai voulu faire une approche par pixelshader dans la technique T0, en déclarant un pixelshader de ce style:
 
texture tSR0;
texture tSR1;

 
pixelshader psST =  
asm
{
  ps.1.0
 
  tex t0
  tex t1
 
  mov r0,t0
  add r0,r0,t1
};
 
technique T0
{
    Lighting       = False;
    SpecularEnable = False;
    ZEnable = False;
   
    pass P0
    {        
 
  Texture[0] = <tSR0>;  
  Texture[1] = <tSR1>;    
 
                pixelshader = <psST>;  
    }
}
 
et bizarrement, le pixelshader ne récupère aucune des textures !!!
comment on passe les textures au pixelshader quand celui-ci est dans une technique ??? (un pixelshader seul, po de problème, mais dans une technique morche mol, dumoins j'ai du mol)
 
j'ai essayé plusieurs combinaisons, gicler les texture[], et/ou associer les textures aux stages (et non aux FOURCC représentant les textures)
 
et si je mets ça à la place, mon pixelshader écrit bien du jaune (R=1.0,V=0,B=1.0), dans le pixelshader est bien éxécuté, mais il accède po aux textures......
 
pixelshader psST =  
asm
{
  ps.1.0
 
  def c5,1.0,1.0,0,1.0
 
  mov r0,c5
};

n°61403
bjone
Insert booze to continue
Posté le 25-09-2001 à 11:16:39  profilanswer
 

pour revenir au premier problème, si je remplace le BlendFactor Alpha par un Add ou un Modulate, ça se passe comme si, la deuxième texture était noire !!! (le add rajoute rien, et le modulate donne du noir)......
 
c'est comme si la texture tSR1 était ignorée !!!! (pourtant ma gf3 le fait finger in the nose, 2 textures en un passe merde!)
 
et pourtant le Star0 & Star1 sont sélectionnés aléatoirement dans une table de 10 textures d'étoiles (celles du sdk :D, les shine.bmp

n°61407
chrisbk
-
Posté le 25-09-2001 à 11:24:37  profilanswer
 

malheureux, des pixels shaders !
sur ma gf2mx ! :D
 
dis si ca passe sous mfc tex, au lieu demater le code, y'a un bouton qui te genere le code pour l'effet courant
 
genre
 
d3ddevice->setTextureStageState(blah)
...
 
 
t'as juste a remettre ca en technique pi vouala (normalement :D )

n°61412
bjone
Insert booze to continue
Posté le 25-09-2001 à 11:35:47  profilanswer
 

ben je sais, c'est que j'ai fo ;)


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

  dx8 sdk : shaders / techniques : blem de blending

 

Sujets relatifs
[php] blem de je sais pas trop koi :( de longueur il me semble ...c quoi l'alpha blending ?
[PHP] Blem avec switch / include ou je sais pas koiSDK DX8
ptit blem en vbtechniques pour mettre en cache les résultats d'une requete SQL en ASP
SDK DX8 : comment ca marche ? 
Plus de sujets relatifs à : dx8 sdk : shaders / techniques : blem de blending


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