Jump to content

  • Log In with Google      Sign In   
  • Create Account

Texture alpha blending?


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
4 replies to this topic

#1 Infinity95   Members   -  Reputation: 272

Like
0Likes
Like

Posted 12 July 2013 - 03:44 PM

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.


"Errare humanum est, sed in errare perseverare diabolicum."


Sponsor:

#2 SillyCow   Members   -  Reputation: 849

Like
1Likes
Like

Posted 12 July 2013 - 07:08 PM

What are you using to render?

IF it's OpenGL did you gl_enable blending?


My new android game : Enemies of the Crown

My previous android game : Killer Bees


#3 Infinity95   Members   -  Reputation: 272

Like
0Likes
Like

Posted 13 July 2013 - 04:06 AM

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?


"Errare humanum est, sed in errare perseverare diabolicum."


#4 kauna   Crossbones+   -  Reputation: 2508

Like
2Likes
Like

Posted 13 July 2013 - 02:21 PM

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, 13 July 2013 - 02:22 PM.


#5 Infinity95   Members   -  Reputation: 272

Like
0Likes
Like

Posted 14 July 2013 - 04:49 AM

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;

"Errare humanum est, sed in errare perseverare diabolicum."





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