我正在按照教程在XNA / Monogame中构建基本效果纹理。一切似乎都有效,但如果百分比= 0,它将始终返回白色。我很难理解为什么会发生这种情况。这是相关的hlsl代码
float Percentage;
sampler TextureSampler: register(s0);
float4 PixelShaderFunction(float4 pos : SV_POSITION, float4 color1 : COLOR0, float2 Tex : TEXCOORD0) : SV_TARGET0
{
float4 Color = tex2D(TextureSampler, Tex).abgr;
float a = Color.a;
float r = Color.r;
float g = Color.g;
float b = Color.b;
Color.rgb = dot(Color.rgb, float3(0.7 * Percentage, 0.59 * Percentage, 0.11 * Percentage));
r = r - (r - Color.rgb) * Percentage;
g = g - (g - Color.rgb) * Percentage;
b = b - (b - Color.rgb) * Percentage;
Color.a = a;
Color.r = r;
Color.g = g;
Color.b = b;
return Color;
}
technique hit
{
pass Pass1
{
PixelShader = compile ps_3_0 PixelShaderFunction();
}
}
当我将argb设置为color1.argb然后它输出正确的颜色但它呈现为实心方块而不是实际对象(在这种情况下为圆圈)
答案 0 :(得分:1)
我已经通过更改
解决了这个问题float4 Color = tex2D(TextureSampler, Tex).abgr;
到
float4 Color = tex2D(TextureSampler, Tex).abgr * color1;