Jump to content

  • Log In with Google      Sign In   
  • Create Account


DirectX: Questions about Alpha blending !Help !


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
6 replies to this topic

#1 AlanWu   Members   -  Reputation: 190

Like
0Likes
Like

Posted 01 January 2014 - 04:30 AM

Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);  //Open alpha blending
Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);  //Source factor
Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);  //Destination factor
Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); //blending parameter 1
Device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); //blending parameter 2
Device->SetTextureStageState(0, D3DTSS_ALPHAARG0, D3DTA_CONSTANT); //blending parameter 3
Device->SetTextureStageState(0, D3DTSS_ALPHAOP,D3DTOP_MODULATE);  //parameter 1 times blending parameter 2
 
Question:
1. The factor D3DBLEND_SRCALPHA is (as, as, as, as). I don't understand why isn't it (rs, gs, bs, as). What does it mean by (as, as, as, as)? Does it use alpha value to displace other colors' values? I don't think it does. So what does it mean?
2. The factor D3DBLEND_SRCALPHA is (as, as, as, as). Does it blend any color channel or it just blend alpha channel?
3. What is separate blending?
4. Can I set my own blending factor for D3DRS_DESTBLEND and D3DRS_SRCBLEND?
5. I don't understand the calculation about D3DTOP_MODULATE. MSDN said arg1 multiply arg2 but how? My texture(D3DTA_TEXTURE) has a 255 value of alpha and the alpha in vertex(D3DTA_DIFFUSE) has a value of 255. How does it multiply to get 255 (cause the result is opaque)? Also, how do they multiply 64 by 255 to get 64? Any full calculation?
6. I want to multiply arg1, arg2 and arg3 together. I want to blend the alpha of my texture with the vertex alpha and the constant alpha. Can I do that?
 
Help!!!!
Also, thank you !!!!!!


Sponsor:

#2 NoAdmiral   Members   -  Reputation: 503

Like
0Likes
Like

Posted 01 January 2014 - 07:29 AM

I think this might answer a few of your questions.


Inspiration from my tea:

"Never wish life were easier. Wish that you were better" -Jim Rohn

 

herwrathmustbedragons.tumblr.com


#3 AlanWu   Members   -  Reputation: 190

Like
0Likes
Like

Posted 01 January 2014 - 07:47 PM

I think this might answer a few of your questions.

No. It doesn't. But thank you!

 

Anybody else can help me?



#4 Endurion   Crossbones+   -  Reputation: 3330

Like
0Likes
Like

Posted 02 January 2014 - 01:12 AM

Regarding 1) Where do you take the (as,as,as,as) or (as,rs,gs,bs) statements from?

 

2) D3DBLEND_SRCBLEND with D3DBLEND_SRCALPHA just tells Direct3d to take the source blend factor for the modulation formula from the source alpha.Whether and how color and alpha is treated is determined by D3DTSS_COLOROP and D3DTSS_ALPHAOP.

 

5) For color operations all colors are projected as float from 0.0 to 1.0. So 255 (= 1.0) * 255 (= 1.0) becomes 255 (1.0)


Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>

#5 AlanWu   Members   -  Reputation: 190

Like
0Likes
Like

Posted 02 January 2014 - 05:01 PM

Regarding 1) Where do you take the (as,as,as,as) or (as,rs,gs,bs) statements from?

 

2) D3DBLEND_SRCBLEND with D3DBLEND_SRCALPHA just tells Direct3d to take the source blend factor for the modulation formula from the source alpha.Whether and how color and alpha is treated is determined by D3DTSS_COLOROP and D3DTSS_ALPHAOP.

 

5) For color operations all colors are projected as float from 0.0 to 1.0. So 255 (= 1.0) * 255 (= 1.0) becomes 255 (1.0)

Thank you a lot. I understand it now.

For Question No.1, (as,as,as,as) is from MSDN. http://msdn.microsoft.com/en-us/library/windows/desktop/bb172508(v=vs.85).aspx

What about Question No.3 ,4 and 6?



#6 Endurion   Crossbones+   -  Reputation: 3330

Like
0Likes
Like

Posted 03 January 2014 - 01:41 AM

I'm not entirely sure on questions 3, 4 and 6, that's why I rather not answer them.

 

So take these with a grain of salt (answer might be wrong):

 

3)

I didn't find any mention of separate blending. My guess is you mean multi-pass blending? If you do, it means to build the final color of a pixel by several draw calls after each other.This lets you combine more than two sources for a final image.

 

4)

Not really as far as I can see. You could however inject your custom factor by changing the vertex alpha or color by using D3DBLEND_SRCCOLOR or D3DBLEND_SRCALPHA. A different way could be changing the material attributes.

 

6) Not directly as far as I can see. This is a prime example for multi-pass blending though.


Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>

#7 AlanWu   Members   -  Reputation: 190

Like
0Likes
Like

Posted 03 January 2014 - 04:32 PM

I'm not entirely sure on questions 3, 4 and 6, that's why I rather not answer them.

 

So take these with a grain of salt (answer might be wrong):

 

3)

I didn't find any mention of separate blending. My guess is you mean multi-pass blending? If you do, it means to build the final color of a pixel by several draw calls after each other.This lets you combine more than two sources for a final image.

 

4)

Not really as far as I can see. You could however inject your custom factor by changing the vertex alpha or color by using D3DBLEND_SRCCOLOR or D3DBLEND_SRCALPHA. A different way could be changing the material attributes.

 

6) Not directly as far as I can see. This is a prime example for multi-pass blending though.

Ok. I see.

Thank you so much!






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS