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