Я пытаюсь добиться того же эффекта в XNA 4.0, который этот спрашивающий стекопотока пытался получить в XNA 3.1, а именно: рисование фона и поверх этой черной маски с видимой через «вырезы» вроде так .
Снимок экрана на i.imgur.com / V4yK6.jpg - это то, что я получил в своих попытках работать с ответами других спрашивающих, используя тот же код шейдера, чтобы получить аналогичный эффект. в XNA 4.0. Очевидно, что я делаю что-то не так, потому что хочу, чтобы это выглядело так: i.imgur.com / ZgD3l.jpg . Может кто-нибудь взглянуть на мой код ниже и дать мне несколько подсказок о том, что я могу делать неправильно? Это вызывается после отрисовки фона:
Rectangle originRect = glowingObject.BoundingRectangle;
// Draw glow overlay
int glowSideLength = SideLength;
Rectangle glowRect = new Rectangle(originRect.X - ((glowSideLength - originRect.Width) / 2),
originRect.Y - ((glowSideLength - originRect.Height) / 2), glowSideLength, glowSideLength);
RenderTarget2D renderTarget = new RenderTarget2D(spriteBatch.GraphicsDevice,
800, 600, false, SurfaceFormat.Color, DepthFormat.None, 4, RenderTargetUsage.PreserveContents);
spriteBatch.GraphicsDevice.SetRenderTarget(renderTarget);
spriteBatch.GraphicsDevice.BlendState = BlendState.Additive;
spriteBatch.GraphicsDevice.Clear(Color.Black);
//Draw some lights and apply shader
lightEffect.CurrentTechnique.Passes[0].Apply();
spriteBatch.Draw(glowOverlay, glowRect, Color.White);
spriteBatch.GraphicsDevice.SetRenderTarget(null);
//Draw "light mask"
foreach (Gem gem in level.gems)
gem.Draw(gameTime, spriteBatch);
spriteBatch.Draw(renderTarget, Vector2.Zero, Color.White);
spriteBatch.GraphicsDevice.BlendState = BlendState.NonPremultiplied;
Текстура glow3, с которой я сейчас тестирую, это просто черная фигура на прозрачном фоне: i.imgur.com / 3t9gf.png .
(Примечание. Изначально я просто создал простую текстуру с черным фоном и прозрачным центром и нарисовал ее сверху, но теперь, когда мне нужно несколько объектов с областями свечения, которые могут перекрываться, этот подход больше не будет работать; поэтому Мне нужно выяснить альфа-смешение ...)