Проблема с альфа-смешиванием в XNA - PullRequest
1 голос
/ 19 февраля 2011

Привет, у меня есть фон и два png спрайта. Я хочу сделать этот эффект , используя предоставленный фон и спрайты, используя XNA 3.1
Я делаю что-то не так, потому что я получаю только это Как вы заметили, это не тот эффект, который я хочу сделать
Возможно ли сделать этот эффект с несколькими строками кода, используя альфа-смешение в XNA 3.1?Практический пример был бы действительно великолепен!

Ответы [ 2 ]

1 голос
/ 20 февраля 2011

Во-первых, визуализируйте текстуры, которые содержат формы, которые вы хотите сделать прозрачными для текстуры А. Текстуры, содержащие фигуры, должны содержать черные фигуры на прозрачном фоне - их легко создавать с помощью программного обеспечения для редактирования изображений, такого как Photoshop.

Затем возьмите текстуру A и нарисуйте ее поверх вашей сцены, используя эффект (шейдер HLSL), который делает:

output = float4(0, 0, 0, A.r);

Эффективно уменьшая альфа выходного изображения, где A темнее.

Изображение будет иметь четкие участки, на которых вы рисовали фигуры А, и везде будет черным.

Вот детали кода шейдера:

sampler TextureSampler : register(s0);

float4 PS(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
{
    float4 Color = tex2D(TextureSampler, texCoord); 

    Color = float4(0, 0, 0, Color.r);

    return Color;
}

technique Vicky
{
    pass P0
    {
        PixelShader = compile ps_2_0 PS();
    }
}
0 голосов
/ 04 января 2013

Если вам нужно решение без шейдера.

Сначала вам нужно, чтобы текстуры тумана войны были черными, а прозрачные части - белыми.

  1. Визуализируйте карту и объект нормально, для RenderTarget2D
  2. Очистить фон до черного
  3. Запустить пакет спрайтов с помощью Additive blend
  4. Рендерить вам текстуры тумана войны
  5. Запустить новый пакет спрайтовс Multiply blend
  6. Визуализация вашей карты RenderTarget2D поверх всего экрана
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...