Directx HLSL像素着色器颜色示例

Directx HLSL像素着色器颜色示例,directx,rgb,hlsl,directx-9,pixel-shader,Directx,Rgb,Hlsl,Directx 9,Pixel Shader,我是hlsl的新手。我正在尝试编写一个像素着色器,将RGB空间转换为YIQ空间(NTSC)。转换过程很好,但我似乎无法让采样器和tex2D返回纹理左上角以外的任何颜色。我知道这一定是个愚蠢的错误,但谷歌搜索让我更加困惑 我曾尝试声明一个纹理并将其链接到带有sampler_状态的sampler2D,但这似乎没有改变任何东西。我正在使用,它运行DirectX 9和Pixel Shader 3.0。我有一个带有图像纹理的简单平面对象。我只想在经过着色器之后能够看到未被触动的纹理,这样我就可以尝试转换步

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

我曾尝试声明一个纹理并将其链接到带有sampler_状态的sampler2D,但这似乎没有改变任何东西。我正在使用,它运行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)