HLSL - объединение текстур - PullRequest
1 голос
/ 15 марта 2011

Я пытаюсь объединить две текстуры в HLSL - в частности, я хочу взять альфа-значения из базового изображения и данные цвета из наложенного изображения.

Мой пиксельный шейдер для этого выглядит следующим образомэто:

float4 PixelShaderFunction(VertexOut input) : COLOR0
{
    float4 baseColor = tex2D( BaseSampler, input.baseCoords.xy ).rgba;
    float4 overlayColor = tex2D( OverlaySampler, input.overlayCoords.xy ).rgba;

    float4 color;
    color.r = overlayColor.r;
    color.g = overlayColor.g;
    color.b = overlayColor.b;
    color.a = baseColor.a;

    return color.rgba;
}

и мое состояние смешивания выглядит следующим образом:

    BlendState bs = new BlendState();
    bs.AlphaSourceBlend = Blend.SourceAlpha;
    bs.AlphaDestinationBlend = Blend.DestinationAlpha;
    bs.ColorSourceBlend = Blend.SourceColor;
    bs.ColorDestinationBlend = Blend.DestinationColor;

Что меня оставляет, так это размытая версия того, что должно быть цветом наложения.Я пробовал многочисленные перестановки настроек BlendState и немного поиграл с математикой пиксельного шейдера, но безрезультатно.

Кто-нибудь может указать мне правильное направление?

Спасибо зааванс =)

1 Ответ

1 голос
/ 15 марта 2011

Я не знаю, как C # обрабатывает вещи, но в целом вам понадобится

AlphaSourceBlend = SrcAlpha
AlphaDestinationBlend = InvSrcAlpha

(C # называет его SourceAlpha и InvSourceAlpha, соответственно).И, очевидно, вы захотите включить альфа-смешивание, но я уверен, что вы это сделали.

...