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