【问题标题】:HLSL Pixel Shader Colour SampleHLSL 像素着色器颜色示例
【发布时间】:2015-07-08 17:30:03
【问题描述】:

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

我尝试过声明纹理并使用 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();
    }
}

我做错了什么?

【问题讨论】:

    标签: directx rgb hlsl directx-9 pixel-shader


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-29
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      相关资源
      最近更新 更多