Im пытается построить RenderTarget альфа-маску для тумана войны, например .. я сказать ему, что я хочу, чтобы очистить RenderTarget с твердым белым (Alpha 255)AlphaMask в monogame не работает должным образом
Тогда я рисую мой изображение с прозрачным кругом, на альфа-канал, оттуда я ожидаю иметь изображение в rendertarget с отверстиями в нем. Это, однако, не так. Я очень хорошо знаком с альфа-маскировкой и сделал это успешно, когда рисую одно изображение в альфа-маску, но при рисовании пучка, как у нас здесь, он полностью не дает мне правильных значений альфа ,
if (mFogOfWarRT == null)
{
mFogOfWarRT = new RenderTarget2D(pGraphics.GraphicsDevice, MapSize, MapSize);
pGraphics.GraphicsDevice.SetRenderTarget(mFogOfWarRT);
//pGraphicsDevice.Clear(Color.Black);
}
else
{
pGraphics.GraphicsDevice.SetRenderTarget(mFogOfWarRT);
}
pGraphicsDevice.Clear(Color.White);
pSpriteBatch.Begin();
BlendState lKeep = new BlendState();
lKeep.AlphaSourceBlend = Blend.One;
lKeep.AlphaDestinationBlend = Blend.Zero;
lKeep.ColorSourceBlend = Blend.Zero;
lKeep.ColorDestinationBlend = Blend.One;
lKeep.ColorBlendFunction = BlendFunction.Subtract;
lKeep.AlphaBlendFunction = BlendFunction.Add;
pGraphicsDevice.BlendState = lKeep;
pGraphicsDevice.BlendState.ColorWriteChannels = ColorWriteChannels.Alpha;
foreach (ClearArea lArea in mDrawQueue)
{
pSpriteBatch.Draw(mAlphaMask, new Rectangle((int)lArea.X, lArea.Y, lArea.Diameter, lArea.Diameter), Color.White);
}
//pSpriteBatch.Draw(mDot, new Rectangle(0, 0, 100, 100), Color.White);
pSpriteBatch.End();
pGraphicsDevice.SetRenderTarget(null);
Это мой рисунок код альфа-маски .. когда рисует на экране мы получаем белый квадрат, больше ничего.
вниз Я рисую мой «Карта» в RGB, а затем установите A, и обратить мое alphamask текстуру и с треском проваливается
pGraphicsDevice.SetRenderTarget(null);
// Draw minimap texture
pGraphicsDevice.Clear(Color.CornflowerBlue);
pGraphicsDevice.BlendState = lKeep;
pGraphicsDevice.BlendState.ColorWriteChannels = ColorWriteChannels.Red | ColorWriteChannels.Blue | ColorWriteChannels.Green;
pSpriteBatch.Begin();
pSpriteBatch.Draw(mDot, new Rectangle(0, 0, 400, 400), Color.Blue);
pGraphicsDevice.BlendState.ColorWriteChannels = ColorWriteChannels.Alpha;
pSpriteBatch.Draw(mFogOfWarRT, Vector2.Zero, Color.White);
pSpriteBatch.End();
Любая помощь с этим было бы очень признателен ..
паста бин полный код
снимок экрана результата доступны в случае необходимости.
попробуем это позже – Emily