Sign in to follow this  
AlanWu

DirectX: Questions about Alpha blending !Help !

Recommended Posts

AlanWu    241
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
Endurion    5412

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
AlanWu    241

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
Endurion    5412

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
AlanWu    241

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this