Как сделать эффект внешнего свечения с помощью HLSL?

В WPF OuterGlowBitmapEffect больше не поддерживается и не обрабатывается Net4.0. DropShadow имеет немного общего и неприемлемого в моем случае. Моя первоначальная цель — сделать белый размытый фон для черного текста ClearType в окне AeroGlass, чтобы сделать его более читаемым в темных сценах. Я начал играть с fx и HLSL. Это довольно интересно и мощно, но я все еще не могу приблизиться к OuterGlowBitmapEffect.

Моя текущая фиктивная версия, отражающая идею:

sampler2D  Sampler : register(S0);
#define PI 3.14f
float4 main(float2 uv : TEXCOORD) : COLOR
{
    float4 px = tex2D(Sampler, uv);

    /*
    if (px.a > 0.9)
    {
        return px;
    }
    */

    const float d = 3;

    int cnt = 0;
    float a = 0;
    for (float x = -0.1*d; x < 0.1*d; x += 0.05*d)
    {
        a += tex2D(Sampler, uv + float2(x, 0)).a;
        a += tex2D(Sampler, uv + float2(0, x)).a;
        a += tex2D(Sampler, uv + x).a;
        cnt += 3;
    }
    a /= cnt;

    float4 s = a;

    float4 r = float4(px.rgb*px.a + s.rgb*(1-px.a), max(px.a, a));

    return r;
}

Кстати, :могу ли я получить исходный код HLSL для DropShadowEffect, чтобы использовать его в качестве эталона? Может ли кто-нибудь указать мне алгоритм OuterGlowEffect на любом языке?

ПРИМЕЧАНИЕ. :Строка заголовка Windows 7 Aero Glass имеет такой эффект, чтобы сделать заголовок более читабельным!Это именно то, что я хотел бы иметь для моего текста в других частях окна (DwmExtendFrameIntoClientArea)Aero Glass Window Title

5
задан caiosm1005 3 March 2014 в 15:35
поделиться