HLSL 像素着色器颜色样本

HLSL Pixel Shader Colour Sample

我是 hsl 新手。我正在尝试编写一个从 RGB space 转换为 YIQ space (NTSC) 的像素着色器。转换过程很好,但我似乎无法将采样器和 tex2D 设置为 return 除了纹理左上角以外的任何颜色。我知道这一定是个愚蠢的错误,但谷歌搜索让我更加困惑。

我已经尝试声明一个纹理并使用 sampler_state 将其链接到 sampler2D,但这似乎没有任何改变。我正在使用 Ventuz,它运行 DirectX 9 和 Pixel Shader 3.0。我有一个带有图像纹理的简单平面对象。我只是想在通过着色器后能够看到未被触及的纹理,这样我就可以尝试转换步骤。

float4x4 WorldViewProjection : WORLDVIEWPROJECTION;

sampler2D TextureSampler : register( s0 );

float4 VS( float4 Position : POSITION ){
    return float4( mul( Position, WorldViewProjection ) );
}

float4 PS( float2 uv : TEXCOORD ) : COLOR
{
    float4 Colour = tex2D( TextureSampler, uv.xy );

    /* Perform colour space conversion steps */

    return YIQA;
}

technique Tech1
{
    pass pass0
    {
        vertexshader = compile vs_3_0 VS();
        pixelshader = compile ps_3_0 PS();
    }
}

我做错了什么?

您的顶点着色器不输出 "TEXCOORD" 属性,因此对于 'uv' 参数,像素着色器的输入将为 (0,0),这就是为什么您只对左上角进行采样。

尝试输出一个 "float2 uv : TEXCOORD" 并将屏幕四个角的 UV 坐标设置为 (0,0), (1,0), (1,1), (0,1)从左上角顺时针方向四边形。