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)从左上角顺时针方向四边形。
我是 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)从左上角顺时针方向四边形。