Jump to content
  • Advertisement
Sign in to follow this  
AlanWu

DirectX: Questions about Alpha blending !Help !

This topic is 1657 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post


Link to post
Share on other sites
Advertisement

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)

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!