Sign in to follow this  
Infinity95

Texture alpha blending?

Recommended Posts

Infinity95    324

So i'm having trouble figuring out how to get transparancy working with my textures. I simply have a Texture (.png) with transparant areas in it. The question now is how to display the transparancy when applying this texture onto my quad. I can't seem to figure out how to do this. I already found out that it has something to do with BlendStates (apparantly?) but have no clue how to use them. Any hints or code samples are appreciated.

Share this post


Link to post
Share on other sites
Infinity95    324

Sorry, forgot to mention that im using Direct3D 11. I don't quite get all the stuff i have to do to enable it. Do i have to change some code in my shaders(they're fairly simple at the moment) as well?

Share this post


Link to post
Share on other sites
kauna    2922
D3D11_BLEND_DESC BSDesc;
 
BSDesc.IndependentBlendEnable = false;
BSDesc.AlphaToCoverageEnable = false;
 
BSDesc.RenderTarget[0].BlendEnable = true;
BSDesc.RenderTarget[0].SrcBlend = SrcBlend; 
BSDesc.RenderTarget[0].DestBlend = DstBlend;
 
BSDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
 
BSDesc.RenderTarget[0].SrcBlendAlpha = SrcBlend;
BSDesc.RenderTarget[0].DestBlendAlpha = DstBlend; 
BSDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
 BSDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
 
ID3D11BlendState *BlendState;
 
DXUTGetD3D11Device()->CreateBlendState(&BSDesc,&BlendState);
 
Use the above code to create a blend state object. Replace SrcBlend / DstBlend with desired blending operation (check MSDN for D3D11_BLEND_DESC). Notice that you may have different operators for alpha channel. After use OMSetBlendState to set the blend state. In the pixel shader it is necessary to output the correct alpha value (from the texture in your case).
 
Keep in mind that you'll need to create another blend state object without any blending (BlendEnable = false) so that you can draw things which don't need blending.
 
Cheers!
Edited by kauna

Share this post


Link to post
Share on other sites
Infinity95    324

Thank you! That helped. I had to fiddle around a bit with the values but now it works like i want it to. This is what i have as values now:

BSDesc.IndependentBlendEnable = false;
	BSDesc.AlphaToCoverageEnable = true;

	BSDesc.RenderTarget[0].BlendEnable = true;
	BSDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
	BSDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
	BSDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;

	BSDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;
	BSDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO;
	BSDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;

	BSDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;

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