2012-12-10 4 views
2

XNA 3.1을 사용하여 무언가를 만들고 있는데 DrawUserPrimitives를 사용하여 2D 리본 자국을 만들려고합니다. 내 알고리즘은 각 프레임에 새로운 정점을 추가하기 만하면됩니다 (움직임이있을 경우). 꼭지점을 반복하고 불필요한 것들을 제거하면서 사라집니다. SpriteBatch를 다른 많은 그래픽에 사용하고 있다는 것을 제외하고는 꽤 잘 작동합니다. 이제이 전체 화면을 RenderTarget2D에 그리는 중입니다. (여러 가지 이유 때문에이 문제를 피할 수는 없지만)이 이상한 알파 문제가 발생합니다.XNA (3.1) DrawUserPrimitives 및 SpriteBatch 알파 문제

문제 I는 다음과 같습니다 봉착 :

Trail is clearly not behaving correctly

이는 잘 지내 페이드 아웃 흰색 흔적해야한다. 분명히 이것은 일어나지 않습니다. 대신 그래픽 장치의 선명한 색상으로 사라집니다. 이 트레일을 그릴 때 SpriteBatch를 끝내고 End()를 호출하고 드로잉이 끝나면 Begin()을 호출하여 깊이를 정확하게 맞출 수 있습니다. 나는 기본을 그릴 사용하고 효과는 단지 특별한 아무것도 가진 BasicEffect과의 SpriteBatch를 초기화하는 코드 것은 여기에 있습니다 :

 spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState); 
     graphics.GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = true; 
     graphics.GraphicsDevice.RenderState.AlphaDestinationBlend = Blend.One; 
     graphics.GraphicsDevice.RenderState.AlphaSourceBlend = Blend.SourceAlpha; 
     graphics.GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha; 
     graphics.GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha; 

설정의 SpriteBatch는 반 투명성에 대한 정확한 색상을 확인 초기화하는 후 RenderTarget 텍스처에서. 내 추측으로는 여기에 문제가있는 것이 있지만 무엇이 확실하지 않은 것 같습니다. 누구든지이 일을 도와 주면 매우 감사 할 것입니다.

건배.

답변

2

오 ... 해결했습니다. SaveStateMode.None을 사용하여 SaveStateMode.SaveState를 스왑하는 데 필요합니다.

아직도 SaveStateMode.SaveState` 성능 좋은 결코 '지적 가치

+1

이 (XNA 4에서 제거되었다) ... 그래도 난 그것에 앤티 앨리어싱받을 수없는 이유를 궁금해. 다각형 모서리의 앤티 앨리어싱은 백 버퍼에서 멀티 샘플링을 설정해야합니다. –

+0

그래, 그것을 지적 주셔서 감사합니다. 내 백 버퍼에 멀티 샘플링을 이미 설정했으며 폴리곤 그리기 시점에서 여전히 멀티 스캔을 지원하고 하드웨어에서 지원한다는 테스트를 거쳤습니다. – Hoeloe