XNA Shader编程系列教程10-Post process图片反相

程序截图

这个shader很简单,但我还有很多问题,所以我决定写一篇很短的教程。要从一个纹理采用器获取颜色,你通常这样做:

float4 Color = tex2D(ColorMapSampler, Tex); 

要获取反相颜色(即补色),你只需用1减去颜色的每个通道的值就可以了:

float4 ColorInverse = 1.0f - tex2D(ColorMapSampler, Tex); 

实现shader

它很短,所以我只写shader代码了:

sampler ColorMapSampler : register(s0); 
// Negative image 
float4 PixelShader(float2 Tex: TEXCOORD0) : COLOR 
{
    float4 Color = 1.0f - tex2D(ColorMapSampler, Tex); 
    
    // Keep our alphachannel at 1. 
    Color.a = 1.0f; 
    return Color;
}

technique PostProcess
{
    pass P0
    {
        // A post process shader only needs a pixel shader. 
        PixelShader = compile ps_2_0 PixelShader(); 
    }
} 

首先,我们从采样器中用1减获取相反的值,但这样做把alpha通道也相反了,如果这正是你想要的,那无关紧要,但如果你想保持原始图片的alpha值,你必须将它恢复回来,或手动地设置某个值。在这个例子中,我们将alpha设置为1,即图片是不透明的。


发布时间:2009/4/29 上午8:18:07  阅读次数:8903

2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823 站长邮箱

沪 ICP 备 18037240 号-1

沪公网安备 31011002002865 号