А вот еще. Заменяет зеленые оттенки на синие.
static float4 Colorka : COLOR0;
static float Bconst: COLOR1;
texture diffuseTexture : TEXTURE_0;
sampler diffuseSampler = sampler_state
{
Texture = <diffuseTexture>;
AddressU = WRAP;
AddressV = WRAP;
AddressW = WRAP;
MinFilter = ANISOTROPIC;
MagFilter = ANISOTROPIC;
MipFilter = ANISOTROPIC;
MaxAnisotropy = 4;
};
struct PSInput
{
float2 texCoords : TEXCOORD0;
};
struct PSOutput
{
float4 color : COLOR;
};
PSOutput PSMain (PSInput input)
{
PSOutput output;
Colorka = tex2D(diffuseSampler, input.texCoords).rgba;
Bconst = Colorka.b;
Colorka.b = Colorka.g;
Colorka.g = Bconst;
output.color.rgba = Colorka;
return output;
}
technique MainTechnique
{
pass p
{
PixelShader = compile ps_2_0 PSMain();
}
}
А можно сделать так? Спроектировать от нормали по оси У вверх вектор, который проверит пересекает вектор какую либо полигон. Если да, то закрасить пиксель в тень.