直接 2D HLSL 像素着色器坐标空间

时间:2021-01-10 10:47:15

标签: hlsl direct2d

在自定义效果 docs 中,它说使用这个公式计算像素的相对偏移:

float2 sampleLocation =
        texelSpaceInput0.xy    // Sample position for the current output pixel.
        + float2(0,-10)        // An offset from which to sample the input, specified in pixels.
        * texelSpaceInput0.zw; // Multi

对于我的视频音序器,我已经包含了自定义效果和过渡,其中许多效果和过渡从 ShaderToy 的 Glsl 转换为 HLSL。 Glsl 中的代码使用归一化坐标 [0...1] 并且许多计算依赖于绝对 xy 位置,而不是相对位置,因此我必须找到一种在我的 HLSL 代码中使用绝对纹理坐标的方法。

所以,我用那个 zw 乘法器来找到右下角样本的 UV :

float2 FindLast(float2 MV)
{
    float2 LastSample = float2(0, 0) + float2(WI,he)* MV;
    return LastSample;
}

宽度和高度作为常量缓冲区传递给效果。

之后,归一化坐标为:

float2 GetNormalized(float2 UV,float2 MV)
{
    float2 s = FindLast(MV);
    return UV / s;
}

这有效。着色器玩具中适用于标准化坐标的代码在我的效果中运行良好。带有该 uv 输入的 D2DSampleInput 返回正确的颜色。

问题是我的解决方案是否可行。例如,我假设左上角的第一个像素位于 uv 0,0,这是否正确可行?

我是 HLSL 和着色器的新手,所以非常感谢您的帮助。

0 个答案:

没有答案