Причина, по которой он фиолетовый, заключается в том, что у вас есть
GraphicsDevice.Clear(Color.Black);
GraphicsDevice.SetRenderTarget(bulletRenderTarget);
, который должен быть наоборот, поэтому изменение его на
GraphicsDevice.SetRenderTarget(bulletRenderTarget);
GraphicsDevice.Clear(Color.Black);
устраняет проблему с пурпуром, чтобы исправить шейдеризмените следующее в fx файле
sampler ColorMapSampler : register(s0);
и измените свой spriteBatch.Begin()
на
spriteBatch.Begin(SpriteSortMode.Immediate, null);
Некоторая дополнительная информация:
s0
указывает на первыйтекстура на графическом устройстве, которая поставляется с spriteBatch.Draw
, если вы хотите использовать s1
, вам нужно сначала установить ее на GraphicsDevice
, используя:
GraphicsDevice.Textures[1] = bulletRenderTarget;
SpriteSortMode.Immediate
просто заставляет spriteBatch.Draw
немедленно нарисовать спрайт, если вы не установите его, он создаст пакет и отрисовает их все сразу, но это будет слишком поздно, потому что его нужно рисовать, когдаEffectPass
применяется.
Что касается размытия, вы можете уменьшить значение BlurDistance
, но вам придется попробовать, вы также можете посмотреть, как сделать шейдер Блума, обычно даетхороший эффект тоже.