Выше приведен пример моей проблемы. У меня есть две одинаковые альфа-маски, просто белый градиент с прозрачным фоном.
Я рисую в RenderTexture2D, который отображается над экраном для создания освещения. Он очищает полупрозрачный черный цвет, а затем альфа-маски рисуются в правильном положении, чтобы выглядеть как огни ..
Сам по себе он работает нормально, но если два столкновения, как нижеприведенный «факел» против синих светящихся грибов, вы можете увидеть, что прозрачность ограничивающей рамки перезаписывает уже нарисованное оранжевое свечение.
Вот мой подход:
Это создает цель рендеринга:
RenderTarget2D = new RenderTarget2D(Global.GraphicsDevice, Global.Resolution.X+4, Global.Resolution.Y+4);
SpriteBatch = new SpriteBatch(Global.GraphicsDevice);
Это рисунок для цели рендеринга:
private void UpdateRenderTarget()
{
Global.GraphicsDevice.SetRenderTarget(RenderTarget2D);
Global.GraphicsDevice.Clear(ClearColor);
// Draw textures
float i = 0;
foreach (DrawableTexture item in DrawableTextures)
{
i += 0.1f;
item.Update?.Invoke(item);
SpriteBatch.Begin(SpriteSortMode.Immediate, item.Blend,
SamplerState.PointClamp, DepthStencilState.Default,
RasterizerState.CullNone);
SpriteBatch.Draw(
item.Texture,
(item.Position - Position) + (item.Texture.Size() / 2 * (1 - item.Scale)),
null,
item.Color,
0,
Vector2.Zero,
item.Scale,
SpriteEffects.None,
i
);
SpriteBatch.End();
}
Global.GraphicsDevice.SetRenderTarget(null);
}
Я слышал о трафаретах глубины и т. Д. И мне кажется, что я пробовал так много комбинаций вещей, но я все еще понимаю проблему. У меня не было никаких проблем с этим при построении всей другой графики в моей игре.
Любая помощь очень ценится, спасибо! :)