【发布时间】:2014-08-05 04:09:51
【问题描述】:
我正在创建一个简单的着色器,用于在 XNA 中绘制进度条。
想法很简单:有两个纹理和值,如果 X 纹理坐标小于值,则使用前景纹理中的像素,否则使用背景纹理。
/* Variables */
texture BackgroundTexture;
sampler2D BackgroundSampler = sampler_state
{
Texture = (BackgroundTexture);
MagFilter = Point;
MinFilter = Point;
AddressU = Clamp;
AddressV = Clamp;
};
texture ForegroundTexture;
sampler2D ForegroundSampler = sampler_state
{
Texture = (ForegroundTexture);
MagFilter = Point;
MinFilter = Point;
AddressU = Clamp;
AddressV = Clamp;
};
float Value;
/* Pixel shaders */
float4 PixelShader1(float4 pTexCoord : texcoord0) : color0
{
float4 texColor =
pTexCoord.x <= Value ?
tex2D(ForegroundSampler, pTexCoord) :
tex2D(BackgroundSampler, pTexCoord);
return texColor;
}
/* Techniques */
technique Technique1
{
pass Pass1
{
PixelShader = compile ps_2_0 PixelShader1();
}
}
但仅纠正 ForegroundTexture。 BackgroundSampler 只是白色的。 我发现正确只显示了最后在着色器中声明的纹理。
请帮我理解为什么会这样?
【问题讨论】:
-
帖子的答案不应包含在帖子中。请在下面发布您的解决方案作为答案。 :)
-
对不起,我是新手。
标签: c# xna progress-bar hlsl effect