2D Pixel Shader не имеет никакого эффекта? - PullRequest
0 голосов
/ 03 ноября 2011

Я установил базовый пиксельный шейдер (сейчас он настроен для тестирования), и он, похоже, ничего не делает.Я настроил это так:

uniform extern texture ScreenTexture;    
const float bloomThreshhold = 0.4;
const float existingPixelColorMult = 1.1;

sampler ScreenS = sampler_state
{
    Texture = <ScreenTexture>;    
};

float4 BloomedColor(float2 texCoord: TEXCOORD0) : COLOR
{
    // pick a pixel on the screen for this pixel, based on
    // the calculated offset and direction
    float2 temp = texCoord;
    temp.x += 1;
    float4 mainPixelColor = 0;    
    /*
    float4 pixelPlus1X = tex2D(ScreenS, temp);
    temp.x -= 2;
    float4 pixelMinus1X = tex2D(ScreenS, temp);
    temp.x += 1;
    temp.y += 1;
    float4 pixelPlus1Y = tex2D(ScreenS, temp);
    temp.y -= 2;
    float4 pixelMinus1Y = tex2D(ScreenS, temp);
    */

    return mainPixelColor;
}

technique Bloom
{
    pass P0
    {
        PixelShader = compile ps_1_1 BloomedColor();
    }
}

с кодом загрузки, например:

        glowEffect = Content.Load<Effect>("GlowShader");
        glowEffect.CurrentTechnique = glowEffect.Techniques[0];

, и используйте код:

            spriteBatch.Begin();
            glowEffect.Begin();
            glowEffect.CurrentTechnique.Passes[0].Begin();
            spriteBatch.Draw(screenImage, Vector2.Zero, Color.White);
            spriteBatch.End();
            glowEffect.CurrentTechnique.Passes[0].End();
            glowEffect.End();

Загрузка работает нормальнои не возникает никаких ошибок, когда я использую этот метод для рендеринга текстуры, но он действует так, как будто кода эффекта там нет.Не может быть, что я использую неправильную версию шейдеров (я тестировал версии 2.0 и 1.1), так почему?(С использованием XNA 3.1)

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Вы возвращаете 0 за каждый пиксель.Вы закомментировали любой код, который вернул бы значение, отличное от 0. 0 - черный, и если вы делаете какой-либо вид рендеринга, вы либо получите черный (если режим наложения отображает это как цвет), либо не изменились (еслирежим наложения умножает результат).Конечно, вы можете (если вы просто пытаетесь увидеть, загружается и работает ли шейдер), попробуйте использовать цвет чуда.Неоновый зеленый кто-нибудь?Затем, как только вы подтвердите, что он, по крайней мере, обрабатывается, начните раскомментировать этот код и оценить результат.

Наконец, если вы ищете Bloom, у Microsoft есть очень полезный пример, который вы, вероятно, узнаете много.отсюда:

http://create.msdn.com/en-US/education/catalog/sample/bloom

0 голосов
/ 03 ноября 2011

Если вы используете XNA 4.0, посмотрите , что Шон Харгривс говорит об этом .

...