2012-03-30 2 views
0

나는 모든 프레임에 텍스쳐를 그려 넣기 때문에 그릴 때마다 알파를 감소시켜 결과적으로 0에 도달하여 인공물이 남지 않도록합니다.AlphaBlending 인공물을 피하기위한 사용자 정의 BlendState

result = (source * sourceBlendFactor) blendFunction (destination * destinationBlendFactor) 

그리고 내 목적지가 Color.Transparent 때문에 나는 내가 필요 그림 :

기본 방정식은

result = 0 = (source * sourceBlendFactor); 

임 다른 BlendState 구성 요소를 통해가는 내 머리를 건 드리는하지만 난 것 캔트 이것을 실현하기 위해 ...

알파 감소를 선형 적으로 유지할 수있는 방법이 있습니까?

+0

은 'C#을 XNA'등으로 제목을 접두사하지 마십시오. 즉, 태그위한거야. 당신은 선택의 우리의 편집기에서 당신에게 자산을 볼 때 그래서이 오류를 수정하는 경우 –

+0

은? 유물이 존재합니까, 아티팩트가 발생하지 않도록 설정 한 렌더링 옵션을 수정하지 않은 경우 부분적으로 투명한 픽셀을 사용자가 가지고있는 모든 아이디어로 완전히 투명하게 만드는 것입니다. 즉, 증상을 수정하려고 시도했는지 확인했습니다. 당신도 문제가 없다. – ClassicThunder

+0

애셋을 미리 들여 올리는 방법은 무엇입니까? 애셋이 미리 곱셈되지 않았고 Texture2D가 미리 곱셈되어 있다고 가정하는 Spritebatch에서 Blendstate를 사용하는 것과 같습니다. – ClassicThunder

답변

1

물론 가능합니다. 현재 알파 상태를 1과 0 사이에서 유지하는 값을 정의하십시오. 각 프레임이 0이 될 때까지 값을 감소 시키십시오. draw 메소드에서 색조의 알파 값을 결정합니다.

byte alpha = 255 - (currentAlphaState * 255); 
spriteBatch.Draw(...., new Color(255, 255, 255, alpha) ...); // assuming white is your default tint color 
+0

은 현재 알파 상태를 가져 오는 방법입니다. RenderTarg et2D 개체? 기본적으로 Im은 지속적으로 RenderTarget2D 클래스에 렌더링합니다. 오래된 이미지는 더 투명하고 새로운 이미지입니다. 기본적으로 픽셀 알파 값을 0으로 감소시킬 수 있습니다. – kbirk

+0

Rendertarget2D에는 '현재'알파 상태와 같은 것이 없습니다. 텍스처에는 알파 픽셀이 포함될 수 있지만 이는 관련이 없습니다. 클래스의 Tag 멤버에 데이터를 저장할 수 있지만 실제로 살펴 봐야 할 것은 알파 블렌딩 상태를 저장하고 값을 업데이트하는 RenderTarget2D를 캡슐화하는 Drawable 게임 구성 요소입니다. – Polity

+0

당신도 이것을 할 수 있습니다 .... spriteBatch.Draw (...., Color.White * currentAlphaState, ...); – Blau